gpt4 book ai didi

c++ - 在 Visual C++ 中读取 unicode 文本文件

转载 作者:行者123 更新时间:2023-11-30 03:08:15 32 4
gpt4 key购买 nike

我正在尝试在 Visual C 中读取一个只有一些数字的简单 unicode (UTF-16) 文本文件。这似乎是一项微不足道的任务,但我无法让它以正确的编码读取文件。

我的文件看起来像这样:

1337 42 23

因为是unicode,所以开头也有0xFF 0xFE BOM标记。

我已经尝试过 wifstream()fwscanf(),但它们都卡在 BOM 中,甚至在跳过 BOM 之后,这两个函数都只读取“1” (他们对 0x00 字符感到困惑,即他们实际上并没有将文件读取为 unicode)。

那么,问题是,如何在 unicode Visual C++ 应用中读取和解析简单的 unicode 文件?

这是我的来源(fwscanf 版本):

int _tmain(int argc, _TCHAR* argv[])
{
int x;
FILE * f = _wfopen(L"bla.txt", L"r+");
if (!f) return -1;

fseek(f, 2, SEEK_SET); // skip the BOM mark

fwscanf(f, L"%d", &x);
wprintf(L"Number read: %d\n", x);

fclose(f);
return 0;
}

输出是:

Number read: 1

最佳答案

微软CRT从VS2005开始支持BOM自动检测。您可以通过在模式参数中使用“ccs”属性来启用它。像这样:

FILE * f = _wfopen(L"c:\\temp\\test.txt", L"rt, ccs=UNICODE");

如果文件没有 BOM,它会回退到 ansi。对于这样的麻烦制造者,您可以使用“UTF-8”或“UTF-16LE”。这当然是非标准的。

关于c++ - 在 Visual C++ 中读取 unicode 文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205252/

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