C++ 如何使用c++; 将UTF-8字符写入文件?
比如说,,C++ 如何使用c++; 将UTF-8字符写入文件?,c++,file-io,unicode,utf-8,C++,File Io,Unicode,Utf 8,比如说,, utf-8值=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)); 无符号短数组[4
utf-8值=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));
无符号短数组[4]={0xc3,0x89,0xc3,0x8a};
流文件的std::of;
open(“1.txt”,std::ios\u base::binary);
write(reinterpret_cast(array),sizeof(array));
但它将0xc3
作为单个字符,并打印其等效字符0xc3
unicode
值。
请帮助我如何在二进制模式下使用
c++
将utf-8
值写入文件当char
数组可以解决您的问题时,为什么要使用short
数组
首先,在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序列。
无符号字符数组[4]={0xc3,0x89,0xc3,0x8a};
流文件的std::of;
open(“1.txt”,std::ios\u base::binary);
write(reinterpret_cast(array),sizeof(array));
如果数组不是UTF-8序列,而是某个字符,您可以在linux上使用
iconv
转换为UTF-8。当char
数组可以解决您的问题时,为什么要使用short
数组
首先,在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序列。
无符号字符数组[4]={0xc3,0x89,0xc3,0x8a};
流文件的std::of;
open(“1.txt”,std::ios\u base::binary);
write(reinterpret_cast(array),sizeof(array));
如果数组不是UTF-8序列,而是某个字符,您可以在linux上使用
iconv
转换为UTF-8。当char
数组可以解决您的问题时,为什么要使用short
数组
首先,在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序列。
无符号字符数组[4]={0xc3,0x89,0xc3,0x8a};
流文件的std::of;
open(“1.txt”,std::ios\u base::binary);
write(reinterpret_cast(array),sizeof(array));
如果数组不是UTF-8序列,而是某个字符,您可以在linux上使用
iconv
转换为UTF-8。当char
数组可以解决您的问题时,为什么要使用short
数组
首先,在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序列。
无符号字符数组[4]={0xc3,0x89,0xc3,0x8a};
流文件的std::of;
open(“1.txt”,std::ios\u base::binary);
write(reinterpret_cast(array),sizeof(array));
如果数组不是UTF-8序列,而是某个字符,您可以在linux上使用
iconv
转换为UTF-8。您确定要用某种解释为UTF-8的东西打开输出文件吗?对不起,我不明白,我只是用gedit.windows、macos或linux打开输出文件是什么意思?在windows中,文件开头有BOM字符,但在代码中看不到。iam使用linux@claptrapAre是否确实要用解释为UTF-8的内容打开输出文件?抱歉,我不明白,我只是用gedit.windows、macos或linux打开输出文件是什么意思?在windows中,文件开头有BOM字符,但在代码中看不到。iam使用linux@claptrapAre是否确实要用解释为UTF-8的内容打开输出文件?抱歉,我不明白,我只是用gedit.windows、macos或linux打开输出文件是什么意思?在windows中,文件开头有BOM字符,但在代码中看不到。iam使用linux@claptrapAre是否确实要用解释为UTF-8的内容打开输出文件?抱歉,我不明白,我只是用gedit.windows、macos或linux打开输出文件是什么意思?在windows中,BOM表字符位于文件的开头,在您的代码中看不到它们。我使用linux@claptrapcan u请在此处编写代码以获得上述解释。感谢@dbasican u请在此处编写代码以获得上述解释。感谢@dbasican u请在此处编写代码以获得上述解释。感谢@dbasican u请在此处编写代码以获得上述解释。感谢@dbasic