gpt4 book ai didi

c++ - 无法从文件中读取 unicode(日语)

转载 作者:搜寻专家 更新时间:2023-10-31 01:20:21 30 4
gpt4 key购买 nike

您好,我有一个包含日语文本的文件,保存为 unicode 文件。

我需要从文件中读取信息并将信息显示到标准输出。

我正在使用 Visual Studio 2008

int main()   
{
wstring line;
wifstream myfile("D:\sample.txt"); //file containing japanese characters, saved as unicode file
//myfile.imbue(locale("Japanese_Japan"));
if(!myfile)
cout<<"While opening a file an error is encountered"<<endl;
else
cout << "File is successfully opened" << endl;
//wcout.imbue (locale("Japanese_Japan"));
while ( myfile.good() )
{
getline(myfile,line);
wcout << line << endl;
}
myfile.close();
system("PAUSE");
return 0;
}

这个程序生成了一些随机输出,我在屏幕上没有看到任何日文文本。

最佳答案

哦, child 。欢迎来到有趣的字符编码世界。

您需要知道的第一件事是您的控制台在 Windows 上不是 unicode。您在控制台应用程序中看到日语字符的唯一方法是您 set your non-unicode (ANSI) locale对日语。这也会使反斜杠看起来像日元符号,并为使用 ANSI Windows API 的程序断开包含欧洲重音字符的路径(应该在 Windows XP 出现时已被弃用,但人们仍然使用这个天...)

因此,您首先要做的是构建一个 GUI 程序。但我会将其作为练习留给感兴趣的读者。

其次,有很多方式来表示文本。您首先需要弄清楚正在使用的编码。是UTF-8吗? UTF-16(如果是的话,是小端还是大端?) Shift-JIS? EUC-日本?如果文件是小端 UTF-16,则只能使用 wstream 直接读取。即使那样你也需要 futz with its internal buffer .除 UTF-16 之外的任何内容,您都会得到无法读取的垃圾。这也只是 Windows 上的情况!其他操作系统可能有不同的 wstream 表示。最好根本不要使用 wstream

因此,我们假设它不是 UTF-16(为了完全通用)。在这种情况下,您必须使用 wstream 将其作为字符流读取 - 不是。然后,您必须将此字符串转换为 UTF-16(假设您使用的是 Windows!其他操作系统倾向于使用 UTF-8 char*)。在 Windows 上,这可以通过 MultiByteToWideChar 来完成。 .确保您传入正确的代码页值,CP_ACPCP_OEMCP 几乎总是错误的答案。

现在,您可能想知道如何确定哪个代码页(即字符编码)是正确的。简短的回答是你没有。没有表面上看文本字符串并说出它是哪种编码的方法。当然,可能会有提示 - 例如,如果您看到 byte order mark ,很可能是 unicode 的任何变体造成了这种影响。但一般情况下,你必须由用户告诉你,或者尝试猜测,猜错了靠用户纠正你,或者你必须选择一个固定的字符集,不要尝试支持任何其他。

关于c++ - 无法从文件中读取 unicode(日语),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4954445/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com