代码之家  ›  专栏  ›  技术社区  ›  Ben Jackson

为什么通过%{echo“$”}传递我的命令会使utf-8工作?

  •  2
  • Ben Jackson  · 技术社区  · 7 年前

    在windows powershell中我使用过 chcp 65001 并选择了一种包含所有我想要的字符的字体。

    如果我显示一个utf-8文件 type file.u8 工作正常 我得到了想要的角色。

    如果我跑 myprogram.exe 然后我得到 第一个非ascii字符后没有输出 (如果在之前运行 CHCP 65001号 这就产生了 乱码 )

    如果我跑 myprogram.exe > test.u8 然后 type test.u8 那个 作品 ,得到所需的输出。

    所以我推断我可以绕过这个文件(使用我有限的powershell知识!)具有 myprogram.exe | % {echo "$_"} 还有那个 作品 . 所以看起来C++运行时正在做某事 特殊的 当它直接与中断utf-8输出的控制台通话时。

    (和我 可以 如果我使用宽字符,则获得所需的输出,但我实际上不希望最后输出utf-16,而是希望得到utf-8。我只想方便地打印调试信息,而不需要额外的字符转换)

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ben Jackson    7 年前

    在与@eryksun的评论交流中,我意识到我忽略了一个实验:我所有的尝试 宽的 人物都很成功。那么如果 type echo 是否能够读取utf-8并输出宽字符?所以我重定向到一个文件:

    myprogram.exe | % {echo "$_"} > test.txt
    

    正在检查 那个 文本文件它被notepad++检测为“ucs-2le bom”。事实上,所有成功的案例( 类型 ,所有重定向到文件等)都生成多字节字符。偶数 type foo.u8 > foo.txt 显示预期的大小增加。

    所以真正的问题不是我的程序(它成功地输出了utf-8),而是有几个东西可以无声地将其转换成windows喜欢的东西。

    推荐文章