如何将Unicode CString(日语)打印到文本文件中
How can I print a Unicode CString (in Japanese) to a text file?
这对我来说似乎很难。我有一段代码可以将CString打印到文本文件中,但值恰好是Unicode(日语)。一旦这一行被击中,它下面的任何其他内容都不会被打印出来。
知道我如何在文本文件中打印日语文本吗?
#define OFSTREAM std::wofstream
OFSTREAM *outfile;
outfile = new OFSTREAM;
outfile->open (filename, ios::out);
CString varName = _T(" ");
/*stuff*/
*outfile << _T(" Name: ") << (LPCTSTR)varName << _T("n");
流停止工作的原因是设置了失败位。您没有处理错误,因此流停止工作。发生错误时,需要清除失败位。
必须设置wostream对象上的区域设置,以便codecvt方面处理将日语宽字符转换为字节的操作。默认情况下,使用"C"语言环境,在VS中,该语言环境仅支持ASCII字符。如果你只需要写文件就可以在日语版本的Windows上工作,你可以做:
std::wofstream outfile(filename, ios::out);
outfile.imbue(std::locale("")); // use the system locale
CString varName = _T(" ");
/*stuff*/
outfile << L" Name: " << (LPCTSTR)varName << L"n";
或者您可以在Windows:上指定日语区域设置
outfile.imbue(std::locale("Japanese")); // use the japanese locale on any Windows system
这两种方法都使用传统的日语区域设置编码,这可能应该避免。您可以使用UTF-8:
// replace just the codecvt facet of the stream's current locale
outfile.imbue(std::locale(outfile.getloc(), new std::codecvt_utf8_utf16<wchar_t>()));
在这种情况下,Unicode可能指的是UTF16。根据用于查看文件的编辑器,您可能需要在文件的开头放置一个字节顺序标记(BOM),以便正确猜测编码和字节顺序。否则,在查看文件时需要显式设置编码。
但是,您的问题表明您在文件中的日语文本之前有文本。如果你把它作为非宽字符串,那就是问题所在。不要混在一起。如果所有文本都很宽,您可能只是无法在您选择的编辑器中显示日语字符,或者没有在Windows中安装对亚洲语言的支持。
Firefox通常非常支持外来字符。把文件拖到那里,检查编码,看看你得到了什么。
如果您使用的是Visual Studio,请转到C++项目设置,并将语言选项设置为使用Unicode而不是ANSI。然后Visual Studio将自动定义宏UNICODE和_UNICODE,您不应该自己定义它们。您可能需要调用setlocale,以便VC++库将内存中的Unicode字符串转换为文本文件中的多字节ANSI字符串,而不是丢失第一个非ASCII字符之后的所有内容。
如果你在MFC中使用其他编译器,那么我想你必须自己定义UNICODE和_UNICODE这两个宏,我不确定你还需要做什么。
如果您希望文本文件包含Unicode而不是多字节ANSI,那么您不希望VC++库对它们进行转换,但您必须执行其他操作。看看MSDN页面wofstream的社区内容部分。
- 如何使代码打印文本文件中的第一行?
- 我想使用 "cout" 命令慢慢打印文本,但我真的找不到任何解决方案
- C++ 在带有回车符的终端中重新打印文本
- 打印文本导致内存泄漏
- 如何使用递归打印文本反驳
- 从 HDFS 读取和打印文本文件
- 在 C++ 中打印文本文件时出现问题
- WinAPI - 如何打印文本以编辑控件
- 打印文本文件c++的输出
- c 打印文本以for循环
- 在 dlib 窗口中打印文本
- 使用GLUT简单地打印文本
- Cout 不会打印文本而没有 endl 在循环中?
- 为什么它只打印文本文件的一个单词,而不是将整个文本文件打印到html文件中
- 在Windows C++中打印文本和变量
- 无法从文件打印文本
- Libharu pdf创建:如何知道打印文本的大小
- opengl在屏幕菜单上打印文本变量
- 在指针之间打印文本
- 如何在按下回车键后使用cout打印文本