2

我想将宽字符输出到文件中,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调用 on fwprintf_l,它将语言环境作为附加参数。

我一直在阅读如何使用最后一次调用,但我无法理解我需要作为语言环境传递的内容。文档对此相当模糊(或者我可能无法理解)。

任何解释为什么fwprintf不像记录的那样表现?以及使用的任何示例fwprintf_l

非常感谢,

京东

这适用于 Mac OS X 10.8.2 下的 Xcode 4.5.1,目标是来自 Objective-C 代码的 iOS 6.0。但这些都不重要。

4

2 回答 2

0

您的语言环境可能是 UTF-8 的一些变体,这意味着只有在打印宽字符(即 ascii 代码 0 - 127 之外的字符)时输出才会是宽的。

如果您想强制进行宽幅打印(例如 UTF-16LE),那么您需要使用libiconv. 这个答案有点说明为什么它不倾向于做你认为它做的事情。

于 2012-10-15T17:00:01.073 回答
0

我在这里猜测一下。

它以 UTF-8 格式保存。现在,对于大多数 ASCII 字符,ASCII 中的表示和 UTF-8 中的表示完全相同。现在,在 UTF-8 中,第一个字节的高位编码“字符”的长度。例如,直到 0x7F 的所有内容都适合一个字节(即标准 ASCII),0x7FF 适合两个字节,等等。有关详细信息,请参阅http://en.wikipedia.org/wiki/UTF-8#Description 。

要“解决”您的问题,只需使用 UTF-8 表中较高的字符即可。

从上述维基百科页面中提取一些示例:

  • $ 应该适合单个字节
  • ¢ 两个字节
  • 三欧元
  • 在四个
于 2012-10-15T16:52:47.370 回答