我想将宽字符输出到文件中,而fwprintf
不会这样做,即使它被描述为这样做。示例代码:
const char *testFileName = "/Users/jdmuys/wideTestFile.txt";
FILE *wideTestFile;
wideTestFile = fopen(testFileName, "w");
fwide(wideTestFile, 1);
fwprintf(wideTestFile, L"12345");
fclose(wideTestFile);
根据我的十六进制转储实用程序,我的文件“wideTestFile.txt”恰好包含5个字节:31 32 33 34 35
。
我怀疑当前语言环境存在一些问题,因为fwprintf
可能调用fwprintf_l
,它将语言环境作为附加参数。
我一直在阅读如何使用最后一次调用,但我无法理解我需要传递的语言环境。文档相当模糊(或者我可能无法理解)。
为什么fwprintf
没有记录的任何解释?以及fwprintf_l
使用的任何示例?
非常感谢,
JD
这是Mac OS X 10.8.2下的Xcode 4.5.1,目标是来自Objective-C代码的iOS 6.0。但这些都不重要。
答案 0 :(得分:0)
我打算在这里猜一下。
它以UTF-8保存。现在,对于大多数ASCII字符,ASCII中的表示和UTF-8中的表示完全相同。现在,在UTF-8中,第一个字节的高位编码“字符”的长度。例如,高达0x7F的所有内容都适合一个字节(即标准ASCII),两个字节中的0x7FF以及接通和打开。有关详细信息,请参阅http://en.wikipedia.org/wiki/UTF-8#Description。
要“修复”您的问题,只需使用UTF-8表格中较高的字符。
从前面提到的维基百科页面中删除一些例子:
答案 1 :(得分:0)
你的语言环境可能是UTF-8的一些变体,这意味着当打印宽字符(即ascii代码0 - 127之外的字符)时,输出只会是 wide 。
如果您想强制进行宽幅打印(例如UTF-16LE),则需要使用libiconv
。 This answer有点说明了为什么它不倾向于做你认为它做的事情。