通过 CodeBlocks 执行 cmd 将不允许 MS Gothic 字体
cmd execution via CodeBlocks won't allow MS Gothic font
当我在 CodeBlocks 中构建我的程序时,cmd 为 "Defaults" 和 "Properties" 显示两个不同的字体列表。
默认 -> 字体:
MSコシック (MS Gothic), Raster Fonts
属性 -> 字体:
Consolas、Lucida 控制台、光栅字体
因此我无法通过 CodeBlocks 中内置的程序打印日文字符。即使 MS Gothic 看似被选为默认值,这在最终执行时也被完全忽略,它只识别 "Properties".
下列出的字体
当 cmd 为 运行 且没有 CodeBlocks 时,默认值和属性选项之间没有差异:它们都显示 MS Gothic 和 Raster 字体。不过,我想继续使用 CodeBlocks。
使用 运行dom kanji 进行测试的代码示例:
#include <iostream>
#include <windows.h>
#include <stdio.h>
using namespace std;
int main()
{
system("chcp 65001 > nul");
printf("姥栄泳");
return 0;
}
更让我感到困惑的是,在 cmd 决定困难之前,我能够使用此设置一两天。我不知道是什么改变导致了这个错误的发生并取消了我通过 Code::Blocks.
打印日文字符的能力
其他详细信息:
- OS - Windows 8.1 Pro,64 位 OS,基于 x64 的处理器
- 系统语言设置为日语(允许使用 MS Gothic 字体,以便在 cmd 中完全打印 JP 字符)
- Code::Blocks 版本 17.12
- GNU GCC 编译器,mingw32-g++.exe 版本 5.1.0。
- 重新安装Code::Blocks没有解决问题
提前致谢!
cmd
命令 shell 是一个旧的终端模拟器,不能 "just do" 其他语言。它非常愚蠢,需要被告知如何根据 20 多年的 Windows 代码页概念解码字节码。如果你想看任何日语,你必须首先确定你的文本实际使用的是哪种编码,比如 JSIS、EUC,... - 查看你的代码,有一个 chcp
指令可以使用codepage 65001,但没有任何实际显示这将是基于编译将生成的内容的正确代码页,因此您必须找出它输出的实际字节序列,然后根据您所知道的使用正确的代码页文本,以及哪些代码页使用哪些字节序列编码哪些文本。
或者,这个更简单:如果您需要现代 unicode 兼容的终端仿真器,请不要使用 cmd
。如果你做 any 种混合语言或 unicode 工作,只需使用像 Console2 这样的东西,我会推荐一周中的任何一天。您的程序将通过它呈现的输出正常工作。
我找到了解决方案,它也回答了我如何能够更早地打印日文文本。
为了在启用 MS Gothic 的情况下欺骗 Code::Blocks 激活 cmd,我首先必须使用对 Shift JIS 代码页的引用:
system("chcp 932 > nul");
使用该字符代码页构建项目,即使它无法正确打印日文字符(大概是因为我使用的字符采用 UTF-8 编码而不是 Shift JIS)。
然后撤消对 chcp 932 的引用并将其更改为 chcp 65001。构建项目,现在 cmd 将使用 MS Gothic 并显示正确的日语字符,即使它声称以下字体仅可供使用:
属性 -> 字体:Consolas、Lucida Console、光栅字体
如果您 select 这些字体中的任何一种,即使重新 select 当前 selected 的字体,cmd 也会意识到它不能使用 MS Gothic 等等日语字符将被方块代替。
我不知道为什么 Code::Blocks 会这样,所以 cmd 必须被欺骗成某种 "limbo" 才能接受 MS Gothic,但至少它再次为我工作。
当我在 CodeBlocks 中构建我的程序时,cmd 为 "Defaults" 和 "Properties" 显示两个不同的字体列表。
默认 -> 字体: MSコシック (MS Gothic), Raster Fonts
属性 -> 字体: Consolas、Lucida 控制台、光栅字体
因此我无法通过 CodeBlocks 中内置的程序打印日文字符。即使 MS Gothic 看似被选为默认值,这在最终执行时也被完全忽略,它只识别 "Properties".
下列出的字体当 cmd 为 运行 且没有 CodeBlocks 时,默认值和属性选项之间没有差异:它们都显示 MS Gothic 和 Raster 字体。不过,我想继续使用 CodeBlocks。
使用 运行dom kanji 进行测试的代码示例:
#include <iostream>
#include <windows.h>
#include <stdio.h>
using namespace std;
int main()
{
system("chcp 65001 > nul");
printf("姥栄泳");
return 0;
}
更让我感到困惑的是,在 cmd 决定困难之前,我能够使用此设置一两天。我不知道是什么改变导致了这个错误的发生并取消了我通过 Code::Blocks.
打印日文字符的能力其他详细信息:
- OS - Windows 8.1 Pro,64 位 OS,基于 x64 的处理器
- 系统语言设置为日语(允许使用 MS Gothic 字体,以便在 cmd 中完全打印 JP 字符)
- Code::Blocks 版本 17.12
- GNU GCC 编译器,mingw32-g++.exe 版本 5.1.0。
- 重新安装Code::Blocks没有解决问题
提前致谢!
cmd
命令 shell 是一个旧的终端模拟器,不能 "just do" 其他语言。它非常愚蠢,需要被告知如何根据 20 多年的 Windows 代码页概念解码字节码。如果你想看任何日语,你必须首先确定你的文本实际使用的是哪种编码,比如 JSIS、EUC,... - 查看你的代码,有一个 chcp
指令可以使用codepage 65001,但没有任何实际显示这将是基于编译将生成的内容的正确代码页,因此您必须找出它输出的实际字节序列,然后根据您所知道的使用正确的代码页文本,以及哪些代码页使用哪些字节序列编码哪些文本。
或者,这个更简单:如果您需要现代 unicode 兼容的终端仿真器,请不要使用 cmd
。如果你做 any 种混合语言或 unicode 工作,只需使用像 Console2 这样的东西,我会推荐一周中的任何一天。您的程序将通过它呈现的输出正常工作。
我找到了解决方案,它也回答了我如何能够更早地打印日文文本。
为了在启用 MS Gothic 的情况下欺骗 Code::Blocks 激活 cmd,我首先必须使用对 Shift JIS 代码页的引用:
system("chcp 932 > nul");
使用该字符代码页构建项目,即使它无法正确打印日文字符(大概是因为我使用的字符采用 UTF-8 编码而不是 Shift JIS)。
然后撤消对 chcp 932 的引用并将其更改为 chcp 65001。构建项目,现在 cmd 将使用 MS Gothic 并显示正确的日语字符,即使它声称以下字体仅可供使用:
属性 -> 字体:Consolas、Lucida Console、光栅字体
如果您 select 这些字体中的任何一种,即使重新 select 当前 selected 的字体,cmd 也会意识到它不能使用 MS Gothic 等等日语字符将被方块代替。
我不知道为什么 Code::Blocks 会这样,所以 cmd 必须被欺骗成某种 "limbo" 才能接受 MS Gothic,但至少它再次为我工作。