如何使用c ++将utf-8字符写入文件

时间:2013-12-06 06:27:50

标签: c++ file-io unicode utf-8

如何使用c ++将utf-8字符写入文件?

例如, utf-8 value=0xc389 如果我以二进制模式将其写入文件,我必须看到字符。

到目前为止,我已尝试过以下

unsigned short array[4]={0xc3,0x89,0xc3,0x8a};
std::ofstream file;
file.open("1.txt", std::ios_base::binary);
file.write(reinterpret_cast<char const*>(array),sizeof(array));

但它需要0xc3作为单个字符,并打印其0xc3 unicode值的等效字符。 帮助我如何在二进制模式下使用utf-8c++值写入文件

1 个答案:

答案 0 :(得分:3)

为什么在short数组解决您的目的时使用char数组?

首先,在UTF-8中,您逐字节写入。如果序列是有效的UTF-8字节序列,则逐字节写入它们。

如果是unicode字符,首先将字符流转换为UTF-8字符,因为超出0x7f的字符将被区别对待。

//I assume this a valid UTF-8 sequence.
unsigned char array[4]={0xc3,0x89,0xc3,0x8a};
std::ofstream file;
file.open("1.txt", std::ios_base::binary);
file.write(reinterpret_cast<char const*>(array),sizeof(array));

如果数组不是UTF-8序列而是某个字符,则可以在linux上使用iconv转换为UTF-8。