C++ 如何将无符号十六进制值转换为应使用c+写入文件的相应unicode字符+;

C++ 如何将无符号十六进制值转换为应使用c+写入文件的相应unicode字符+;,c++,unicode,hex,C++,Unicode,Hex,我需要将无符号十六进制值转换为相应的unicode字符,这些字符应该使用c写入文件++ 到目前为止我已经试过了 unsigned short array[2]={0x20ac,0x20ab}; 应使用c++将其转换为文件中的相应字符。这取决于您选择的编码 如果使用UTF-8编码,则需要首先将每个Unicode字符转换为相应的UTF-8字节序列,然后将该字节序列写入文件 它的伪代码如下 EncodeCharToUTF8(charin, charout, &numbytes); //En

我需要将无符号十六进制值转换为相应的unicode字符,这些字符应该使用c写入文件++

到目前为止我已经试过了

unsigned short array[2]={0x20ac,0x20ab};

应使用
c++

将其转换为文件中的相应字符。这取决于您选择的编码

如果使用UTF-8编码,则需要首先将每个Unicode字符转换为相应的UTF-8字节序列,然后将该字节序列写入文件

它的伪代码如下

 EncodeCharToUTF8(charin, charout, &numbytes); //EncodeCharToUTF8(short,char*, int*);
 WriteToFile(charout, numchar);
如果使用UTF-16编码,则需要首先在文件开头写入BOM,然后将每个字符编码为UTF-16字节序列(字节顺序在这里很重要,它是小端还是大端取决于您的BOM)

虽然步骤与UTF-16类似,但不建议使用UTF-32

我认为这应该有助于你开始

从您的阵列来看,似乎您将使用UTF-16。 为小端输入UTF-16 BOM
0xFFFE
,为大端输入UTF-16 BOM
0xFEFF
。之后,按照机器的字节顺序写入每个字符


我在这里给出了伪代码,可以用白盒包装。搜索有关编码转换的更多信息。

实际上,您面临两个问题:

1。如何将缓冲区从UTF-8编码转换为UTF-16编码?
我建议你用, 示例代码可以如下所示:

    std::string ansi = "This is what we want to convert";
try
{           
    std::string utf8 = boost::locale::conv::to_utf<char>(ansi, "ISO-8859-1");
    std::wstring utf16 = boost::locale::conv::to_utf<wchar_t>(ansi, "ISO-8859-1");
    std::wstring utf16_2 = boost::locale::conv::utf_to_utf<wchar_t, char>(utf8);
}
catch (boost::locale::conv::conversion_error e)
{
    std::cout << "Fail to convert to unicode!" << std::endl;
}
std::string ansi=“这是我们想要转换的”;
尝试
{           
std::string utf8=boost::locale::conv::to_utf(ansi,“ISO-8859-1”);
std::wstring utf16=boost::locale::conv::to_utf(ansi,“ISO-8859-1”);
std::wstring utf16_2=boost::locale::conv::utf_to_utf(utf8);
}
捕获(boost::locale::conv::conversion\u错误e)
{

std::cout您的文件是如何编写的?您使用的是什么编码?UTF8或…?这些不是“十六进制值”,它们分别是整数8364和8363的十六进制表示形式。它们是“€”和“₫”的Unicode表示形式,因此,如果这些字符是您要查找的字符,则不需要进行太多转换。或者您想将字符串“0x20ac”转换为Unicode?对不起,我不明白,请您将其更具体一些。如果您有代码,请在此处编写
    std::string ansi = "This is what we want to convert";
try
{           
    std::string utf8 = boost::locale::conv::to_utf<char>(ansi, "ISO-8859-1");
    std::wstring utf16 = boost::locale::conv::to_utf<wchar_t>(ansi, "ISO-8859-1");
    std::wstring utf16_2 = boost::locale::conv::utf_to_utf<wchar_t, char>(utf8);
}
catch (boost::locale::conv::conversion_error e)
{
    std::cout << "Fail to convert to unicode!" << std::endl;
}