【问题标题】:Unicode and Command Prompt (Windows) [duplicate]Unicode 和命令提示符 (Windows) [重复]
【发布时间】:2014-08-21 10:01:00
【问题描述】:

我开始了解编程语言 C,但在编码方面遇到了一些问题。当我通过 printf 写入命令提示符时,非 ASCII 字符显示不正确。源代码文件编码为UTF-8。

源代码:

#include <stdio.h>

int main(void)
{
    printf("\n\u2212\n");

    return 0;
}

cl.exe:

警告 C4566:universal-character-name '\u2212' 表示的字符无法在当前代码页 (1252) 中表示

如何让命令提示符正确显示 Unicode?​​p>

【问题讨论】:

  • 我从来不用指定编码。
  • 举一些例子,你如何尝试输出这些字符,你期望什么以及你得到什么。并且可能给出源文件编码(如果不是 7 位 ASCII)和终端的编码。
  • 是的,this codepage 无法对 Unicode 代码点 0x2212 进行编码。另请注意,stdout 是文本流而不是二进制流,因此您应该使用 printf("\n\u2212\n");
  • 实际上,你没有 C 题(据我所知);这是一个关于如何在 Windows 中更改语言环境/编码的问题。也许重新标记您的问题(以吸引更有可能帮助您的受众)或询问您的操作系统供应商。
  • 实际上,我的意思是添加一个标签以接触 Windows 观众,而不是删除 C 标签:)

标签: c unicode encoding command-line command-prompt


【解决方案1】:

试试这个:

#include <stdio.h>

int main(void)
{
    printf("\r\n%C\r\n", L'\u2212'); // or %Lc
    return 0;
}

或者这个:

#include <stdio.h>

int main(void)
{
    wprintf(L"\r\n\u2212\r\n");
    return 0;
}

或者这个:

#include <stdio.h>

int main(void)
{
    wprintf(L"\r\n%c\r\n", L'\u2212');
    return 0;
}

【讨论】:

  • 这无济于事。 OP 有一个控制台,其中 0x2212 没有编码。这不是 C 的问题,而是关于如何更改 Windows“控制台”编码的问题。
  • 虽然我同意 Windows 控制台不能很好地处理 Unicode,但他得到的是编译器警告,而不是控制台警告。所以先处理编译器,再处理控制台。
  • C中有源字符集和执行字符集; OP 显然在将前者转换为后者时存在问题。而后者 (Windows-1252) 没有 0x2212 的表示形式,因此在不更改此字符集的情况下无法解决该问题。我对 Windows 了解不多,但是您提供的代码似乎不太可能比 OP 的原始代码表现得更好(编辑:至少是第一个 sn-p;也许 Windows 控制台支持不同编码的宽字符......)。
【解决方案2】:

您可能正在输出正确的符号,问题是命令行不理解要显示的字符。确保您的终端可以处理 UTF-8 输出。尝试正确设置本地。

【讨论】:

    猜你喜欢
    • 2012-02-12
    • 2012-03-15
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    相关资源
    最近更新 更多