C++;在Linux上编写UTF-8 我在Visual Studio:C++中用C++编写的Windows上的代码如下 FILE* outFile = fopen(outFileName, "a,ccs=UTF-8"); fwrite(buffer.c_str(), buffer.getLength() * sizeof(wchar_t), 1, outFile); std::wstring newLine = L"\n"; fwrite(newLine.c_str(), sizeof(wchar_t), 1, outFile); fclose(outFile);
这将正确地以UTF-8写出文件。 当我在Linux上编译和运行相同的代码时,会创建该文件,但长度为零。如果我按以下方式更改fopen命令,则会创建文件,且长度不为零,但所有非ASCII字符都显示为垃圾:C++;在Linux上编写UTF-8 我在Visual Studio:C++中用C++编写的Windows上的代码如下 FILE* outFile = fopen(outFileName, "a,ccs=UTF-8"); fwrite(buffer.c_str(), buffer.getLength() * sizeof(wchar_t), 1, outFile); std::wstring newLine = L"\n"; fwrite(newLine.c_str(), sizeof(wchar_t), 1, outFile); fclose(outFile);,c++,utf-8,internationalization,fopen,C++,Utf 8,Internationalization,Fopen,这将正确地以UTF-8写出文件。 当我在Linux上编译和运行相同的代码时,会创建该文件,但长度为零。如果我按以下方式更改fopen命令,则会创建文件,且长度不为零,但所有非ASCII字符都显示为垃圾: FILE* outFile = fopen(outFileName, "a"); ccs=UTF-8在Linux gcc上不工作吗?不,在Windows上完成的扩展在Linux、OS-X、Android、iOS和其他任何地方都不工作。微软只是做了这些扩展,以实现您编写与其他平台不兼容的代码
FILE* outFile = fopen(outFileName, "a");
ccs=UTF-8在Linux gcc上不工作吗?不,在Windows上完成的扩展在Linux、OS-X、Android、iOS和其他任何地方都不工作。微软只是做了这些扩展,以实现您编写与其他平台不兼容的代码 将宽字符串转换为包含UTF-8的字节字符串,然后像往常一样将字节写入文件。 有很多方法可以做到这一点,但最标准的兼容方法可能是:
#包括
#包括
#包括
#包括
使用Converter=std::wstring\u convert;
int main()
{
std::wstring wide=L“ÖïTiib这可能是因为您的控制台具有与utf-8不同的字符集”如果模式不是上面列出的字符串之一,则行为未定义。某些实现定义了其他支持的模式(例如Windows)“因此,ccs=UTF-8
是一个MS扩展。如何在Linux上更改fopen命令以确保它写出UTF-8?一种方法是首先将wchar\u t转换为一个字节(char
)UTF-8编码单元数组。然后写出UTF-8编码单元数组。你能给我举个例子吗?谢谢。这对我很有用。你的名字像“Öö”,你一定是特殊字符处理方面的专家!再次感谢!