使用Unicode写入文件

6

我在我的c程序中写入unicode文件时遇到了一些问题。我试图将一个unicode日语字符串写入文件。但是当我去检查文件时,它是空的。如果我尝试一个非unicode字符串,它就可以正常工作。我做错了什么?

setlocale(LC_CTYPE, "");
FILE* f;
f = _wfopen(COMMON_FILE_PATH,L"w");
fwprintf(f,L"日本語");
fclose(f);

关于我的系统:   我正在运行 Windows 操作系统,并且我的集成开发环境是 Visual Studio 2008。


我将此作为评论而非答案发布,因为我对C一窍不通,但我想知道您的源代码是否为UTF-8格式,而编译器则认为它是ASCII格式。 - Jeffrey L Whitledge
不,我不认为是这样的。编译器知道它是UTF-8编码,我确保了它:p - Lefteris
好的。无论如何尝试总是值得的。 :-) - Jeffrey L Whitledge
最近出现了一个类似的问题,我想是昨天。答案是fwprintf不能正确地将Unicode转换为单字节。 - Mark Ransom
3个回答

8
您可能需要在模式中添加编码方式。可能是这样的:
f = _wfopen(COMMON_FILE_PATH,L"w, ccs=UTF-16LE");

谢谢,这个方法可行。但是这也带来了一个额外的问题。我实际上想要做到的是能够通用地将Unicode写入文件。日语只是一个例子。这个方法对于所有支持Unicode的语言都有效,对吗? - Lefteris
正确。它不应该依赖于语言。 - Mark Wilkins

0

使用fopen()也可以在这里为我工作。我正在使用Mac OS X,所以我没有_wfopen(); 假设_wfopen()没有给你返回错误的东西,那么你的代码应该可以工作。

编辑:我也在cygwin上进行了测试-它似乎也可以正常工作。


对我没用 :( ,_wfopen返回正常的FILE*指针。我正在运行Windows。我的IDE是Visual Studio 2008。 - Lefteris

0

我在我的两个盒子上都找不到关于_wfopen的参考资料,但我不明白为什么用fopen打开会导致问题,你只需要一个文件指针。

重要的是C是否识别内部Unicode的值并将这些二进制值正确地推送到文件中。

尝试像Carl建议的那样只使用fopen,它应该可以正常工作。

编辑:如果仍然无法正常工作,您可以尝试将字符定义为它们的整数值,并使用fwprintf()推送它们,我知道这很麻烦,而且从长远来看也不是一个好的解决方法,但它也应该可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接