C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 我怎么可以和一些unicode文本?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我问一个代码片段,它是一个unicode文本,将另一个unicode连接到第一个unicode文本,并且cout是结果.

附:这个代码将帮助我解决unicode的另一个更大的问题.但关键的是要完成我所要求的.

ADDED:BTW当我运行可执行文件时,我无法在命令行中写入任何unicode符号.我应该怎么做

解决方法

这是一个示例,它显示了四种不同的@L_450_12@,其中只有第三种(C conio)和第四种(本地 Windows API)可以工作(但是只有当stdin / stdout不被重定向时).请注意,您仍然需要包含要显示的字符的字体(Lucida Console至少支持希腊语和西里尔字体).请注意,这里的所有内容都是完全不可移植的,终端上没有便携式输入/输出Unicode字符串的方式.
#ifndef UNICODE
#define UNICODE
#endif

#ifndef _UNICODE
#define _UNICODE
#endif

#define StriCT
#define NOMINMAX
#define WIN32_LEAN_AND_MEAN

#include <iostream>
#include <String>
#include <cstdlib>
#include <cstdio>

#include <conio.h>
#include <windows.h>

void testIostream();
void testStdio();
void TESTConio();
void testWindows();

int wmain() {
    testIostream();
    testStdio();
    TESTConio();
    testWindows();
    std::system("pause");
}

void testIostream() {
    std::wString first,second;
    std::getline(std::wcin,first);
    if (!std::wcin.good()) return;
    std::getline(std::wcin,second);
    if (!std::wcin.good()) return;
    std::wcout << first << second << std::endl;
}

void testStdio() {
    wchar_t buffer[0x1000];
    if (!_getws_s(buffer)) return;
    const std::wString first = buffer;
    if (!_getws_s(buffer)) return;
    const std::wString second = buffer;
    const std::wString result = first + second;
    _putws(result.c_str());
}

void TESTConio() {
    wchar_t buffer[0x1000];
    std::size_t numRead = 0;
    if (_cgetws_s(buffer,&numRead)) return;
    const std::wString first(buffer,numRead);
    if (_cgetws_s(buffer,&numRead)) return;
    const std::wString second(buffer,numRead);
    const std::wString result = first + second + L'\n';
    _cputws(result.c_str());
}

void testWindows() {
    const HANDLE stdIn = GetStdHandle(STD_INPUT_HANDLE);
    WCHAR buffer[0x1000];
    DWORD numRead = 0;
    if (!@R_450_5875@nsoleW(stdIn,buffer,sizeof buffer,&numRead,NULL)) return;
    const std::wString first(buffer,numRead - 2);
    if (!@R_450_5875@nsoleW(stdIn,NULL)) return;
    const std::wString second(buffer,numRead);
    const std::wString result = first + second;
    const HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    DWORD numWritten = 0;
    WriteConsoleW(stdOut,result.c_str(),result.size(),&numWritten,null);
}

>编辑1:我已经添加一个基于conio的@L_450_12@.>编辑2:我已经搞砸了_O_U16TEXT有一点,如迈克尔·卡普兰的博客所描述的,但似乎只有wgets将(8位)的ReadFile数据解释为UTF-16.我会在周末进一步调查一下.

大佬总结

以上是大佬教程为你收集整理的c – 我怎么可以和一些unicode文本?全部内容,希望文章能够帮你解决c – 我怎么可以和一些unicode文本?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。