是否有任何语言能够正确完整地完成Unicode和跨平台?

时间:2011-02-17 07:51:58

标签: unicode console cross-platform

多年来我使用了很多编程语言,而且我是维基词典的扶手语言学家和贡献者。我一直在制作一些自己的工具来从命令行查找维基词典,但我遇到了一个令人惊讶的问题。

Neither Perl nor Python can output Unicode to the console natively under both *nix and Windows(虽然有各种解决方法)。主要原因是* nix操作系统,如UTF-8和Windows中的Unicode,喜欢UTF-16中的Unicode。但它似乎也Windows makes it very difficult to use wide characters with the console even though both the console and wprintf are wide character native

所以问题是,如果我将这些语言超越Java,C#,Scala等,情况会更好。或者是否有任何脚本语言从Windows开始,然后被移植到* nix?

这是一些理想的伪代码:

function main()
{
    print( L"hello, 世界" );
}

4 个答案:

答案 0 :(得分:2)

  

是否有任何语言能够正确完整地完成Unicode和跨平台?

C#非常广泛地支持Unicode。它的标准库(.NET Framework)也非常支持Unicode。跨平台是合理的,但并不完美:它通过Mono实现,并通过Xamarin在移动平台上实现。

命令行程序非常便携,但可以被古老的遗物搞砸,比如已经十年或更长时间未更新的SSH终端。

  

这是一些理想的伪代码:

C#非常接近:

using System;
class Program
{
    static void Main(string[] args)
    {
        Console.OutputEncoding = System.Text.Encoding.UTF8;
        Console.WriteLine("tést, тест, τεστ, ←↑→↓∏∑√∞①②③④, Bài viết chọn lọc");
    }
}

输出屏幕截图(使用Consolas或其他具有上述所有字符的字体):

proof

当然C#不是脚本语言;它对几乎所有事物的处理方式都有很大不同。

答案 1 :(得分:0)

AFAIK几乎所有脚本语言都是在Unix世界中启动的,然后移植到Windows。我不知道在Windows上启动的任何(脚本)语言的例子......现在看来用Unicode做得很好的一种脚本语言是Ruby。

答案 2 :(得分:0)

八年半过去了,情况正在改善。

  • NodeJS 是第一种在* nix,Mac和Windows上在终端/控制台上使用Unicode的Unicode即可“正常工作”的语言。首选UTF-8或UTF-16。

  • 在我问这个问题时,这不适用于Perl,Python或Ruby。我不确定PHP。但是至少 Python 开发人员最终认真对待了相关的错误报告/功能请求,并做了一些工作。 Python现在已经使用跨平台终端Unicode了多年。

  • 我刚刚开始查看 Rust ,并想检查一下。让他们感到非常惊奇的是,我感到非常惊喜,Rust是第一个在Mac,Windows和* nix的控制台中可以使用Unicode跨平台的开箱即用的低级/非脚本语言。 / p>

答案 3 :(得分:-1)

也许这是您所暗示的解决方法之一,但是:您可以使用非光栅字体在“DOS框”中 chcp 65001 选择并查看UTF -8在Unix或Windows下运行不变的脚本(或程序)输出。付出的代价是.bat / .cmd文件不会执行。