【发布时间】:2012-11-16 17:21:52
【问题描述】:
我正在尝试读取 Unicode 文本文件并将读取的数据写回文本文件。这是代码。读取工作正常。我可以判断,因为它在控制台上显示了一个错误字符,但输出文本文件为空。任何帮助将不胜感激!
int main() {
wchar_t *filename=L"normal.txt";
FILE *infile;
infile=_wfopen(filename,L"r");
wchar_t b[2];
fwscanf(infile,L"%ls",b);
wprintf(L"The string read was :%ls\n",b);//Read a character from the file
FILE *outfile;
wchar_t *filetwo = L"one.txt";
outfile=_wfopen(filetwo,L"w, ccs=UTF-16LE");
fwprintf(outfile,L"%ls",b);
fclose(outfile);
getch();
return 0;
}
另外,我需要特别处理梵文脚本。它们占用多少字节?如果是 4,任何关于如何处理使用 wchar_t 的线索的线索,因为它只有 2 个字节宽。
【问题讨论】:
-
另外,请注意 wchar_t 不能携带 Unicode 代码点值,因为在某些平台上它只有 16 位。
-
nitpick:“Unicode”没有指定二进制表示,所以你不能真正拥有这样的文本文件(好吧,除了一般的非特定限定符)。文件是否使用 UTF8、UTF16 或其他编码?
-
您需要专门处理多字代码点,是的,要么使用 Unicode 库,要么自己编码和解码这些代理项。
-
@hyde 问题中的源代码是 UTF-16LE,也就是说,如果文本文件完全符合标准,则 BOM-less little-endian UTF-16。所以 Visual C++ 没有问题。
-
梵文位于 BMP(基本多语言平面)中,它包含 U+0000 和 U+FFFF 之间的代码点。主要的梵文字符在 U+0900 到 U+097F 范围内;还有一个梵文扩展范围 U+A8E0 到 U+A8FF。所有这些在 2 字节
wchar_t中都应该没问题。
标签: c++ visual-c++ unicode io