如何将无符号十六进制值转换为相应的unicode字符,这些字符应该使用c++写入文件
How to convert unsigned hex values to corresponding unicode characters which should be written to file using c++
我需要将无符号十六进制值转换为相应的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)。
WriteToFile("xFFxFE", 2); //Write BOM
EncodeCharToUTF16(charin, charout, &numbytes); //EncodeCharToUTF16(short,char*, int*);
//Write the character.
WriteToFile(charout, numchar);
尽管步骤与UTF-16类似,但不建议使用UTF-32。
我认为这应该有助于你开始。
从您的阵列来看,您似乎要使用UTF-16。为小端序编写UTF-16 BOM 0xFFFE
,为大端序编写0xFEFF
。之后,按照机器的字节顺序写入每个字符。
我在这里给出了伪代码,你可以把它白框起来。搜索有关编码转换的更多信息。
实际上您正面临两个问题:
1.如何将缓冲区从UTF-8编码转换为UTF-16编码
我建议你使用boost语言环境库,示例代码可以是这样的:
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;
}
2.如何将缓冲区保存为UTF-16编码的文件
这涉及到手动在文件开头写入BOM(ByteOrderMark),您可以在此处找到参考
这意味着,如果要将编码为UTF-8的缓冲区保存到UNICODE文件中,则应首先在输出文件的开头写入3个字节的"EF BB BF"
"FE FF"适用于Big Endian UTF-16,
"FF FE"适用于Little Endian UTF-16。
我你仍然不明白BOM是如何工作的,只要打开一个记事本,写一些单词,用不同的"编码"选项保存它,然后用十六进制编辑器打开保存的文件,你就可以看到BOM了
希望它能帮助你!
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- 如何从文本文件中读取数值,直到遇到字符类型?
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 如何像在 C++ 中处理数组一样对 .txt 文件中的字符进行寻址?
- 尝试将字符串从文件读取到无符号字符向量中
- 如何在C++中反转文本文件中字符的顺序?
- 生成随机.txt文件,10行,10列。充满随机:"*"、"#"、"@"。然后将随机字符替换为'P'
- 如何存储 unicode 字符并将其输出到文件?
- 无法将整个文本文件复制到字符数组
- 仅读取文件末尾的最后 3 个字符,并将其另存为 int
- 将未签名的字符写入输出文件
- 从我的 2DgridArray 中的文本文件中获取每个字符
- ifstream 读取的字符与文件中写入的字符不同
- VSCode C++调试文件名中包含中文字符的文件时插件损坏
- 从文本文件 (C++) 生成字符矩阵
- 使用指针编译代码后,.cpp文件将变为随机字符
- 在c++中读取文件时,它如何自动将字符放入字符数组,将数字放入整数变量
- 跨平台UTF-8字符文件数据编码/解码