【发布时间】:2014-11-29 14:41:21
【问题描述】:
我在 Windows 上使用 MinGW GCC 编译器时遇到宽字符串文字问题。
当我使用wscanf 读取用户输入时,wprintf 输出正确的国家字符。然而,宽字符串文字会在第一个国家字符处停止输出:
wprintf (L"China - Čína"); // outputs "China - "
假设 wchar_t 默认编码为 UTF-16(是 LE 还是 BE?),当源是 UTF-8 文件时它是如何工作的?我尝试将源代码另存为 UTF-16,但出现 illegal byte sequence 错误。
【问题讨论】:
-
你源代码的编码与程序运行时使用的编码无关。你的源代码可以是你想要的任何编码,只要编译器知道它是什么,以便它可以将你的字符串文字翻译成运行时字符集。
-
包括
<locale.h>,然后在wprintf行之前调用setlocale(LC_ALL, "sk");(或"cz",或任何一种语言“Čína”),应该正确显示你放的文字。然而,事实并非如此。我无法用颠倒的抑扬符打印“Č”。对不起... -
使用调试器中的内存视图检查保存字符串的内存区域。如果它在内存中,那么它不是与编译器相关的问题。如果它与编译器无关,那么它可能是一些花哨的运行时库相关问题。另一种可能的情况是您的输出设备(控制台或控制台仿真或其他)不支持您想要输出的每个 unicode 字符,并且在花哨的字符情况下的行为与您预期的不同。
-
@pasztorpisti 非常感谢,我想通了,看看我的回答