从一开始就使用Unicode支持设计了哪些编程语言?

kno*_*orv 18 unicode programming-languages localization language-design internationalization

哪些广泛使用的编程语言是在支持Unicode的基础上设计的?

许多编程语言在后来的版本中添加了Unicode支持,但是从第一天开始就使用Unicode支持广泛使用哪种语言?

Ken*_*nan 32

Java可能是第一个获得全面支持Unicode的流行语言.

  • Java永远支持完整的Unicode标准,而不仅仅是BMP.字符串存储在UTF-16中(不是UCS-2,这仅表示BMP). (6认同)
  • 设计Java时,Unicode只是BMP.根据MSDN关于.Net中String的文档 - "Length属性返回此实例中Char对象的数量,而不是Unicode字符的数量.".java.lang.String.codePointCount()方法返回字符串中的代码点数,并考虑代理项. (5认同)
  • 除了它"仅"支持基本多语言平面(这是Java在Java发明时所拥有的)..NET框架是我所知道的第一种语言,它是围绕"完整"unicode支持设计的(包括包含代理的字符串的正确长度......) (4认同)
  • @JoachimSauer:然而*仍然*没有内置功能来迭代`String`*的字符. (2认同)

Jay*_*uzi 31

基本上所有.NET语言都是Unicode语言,例如C#VB.NET.

  • George,所有使用System.String类的.NET语言都具有完全的Unicode支持.我不知道任何不使用System.String类的.NET语言,因此这意味着IronRuby,IronPython,尤其是F#(这是一种以VS2010开头的第一类语言)具有本机Unicode支持.当BCL中已经提供了Unicode字符串类时,我想不出有人为什么会创建一个.NET语言并为它创建一个特殊的非Unicode字符串类的好理由. (7认同)

Mar*_*off 19

Python 3中有许多重大变化,其中包括为所有文本切换到Unicode.

所以Python并没有为Unicode设计,但Python 3却是.


Mar*_*ell 12

我不知道这在其他语言中有多远,但关于C#的一个有趣的事情是,不仅运行时(string类等)知道unicode - 而且源代码完全支持unicode:

using ????? = System.Object;
using ????? = System.Int32;
public class ???? : ?????  {
    public ????? ???() {
        int ??? = 0;
        for (int ? = 0; ? < 20; ?++) ???+=?;
        return ???;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 在Perl 5和Perl 6中也是如此.Perl 6甚至还有Unicode运算符. (4认同)
  • (请注意,上面的浏览器/编辑器中可能存在一些奇怪的从右到左的问题;如果将其粘贴到VS中,则为"int {name} = 0") (2认同)
  • @gw:尝试运行`"πθ√".在LINQPad中选择(c => CharUnicodeInfo.GetUnicodeCategory(c))`你会明白为什么;-) (2认同)

Roh*_*hit 9

Google的Go编程语言支持Unicode,可与UTF-8配合使用.


Vin*_*lds 6

使用编程语言从一开始就很难为未来设计Unicode支持.

Java是将其设计为语言规范的语言之一.但是,Java v1.0中的Unicode支持与Java SDK的v5和v6 不同.这主要是由于最初设计语言时语言规范所适用的Unicode版本.Java尝试跟踪每个主要版本的Unicode标准中的更改.

JLS的早期实现可以声称支持Unicode,主要是因为Unicode本身支持65536个字符(Java支持Unicode 1.1的v1.0,Java v1.4支持Unicode 3.0),它与字符占用的16位存储空间兼容.随着Unicode 3.1的变化 - 它是一个不断发展的标准,通常在每个版本中添加更多字符.3.1中后面添加的字符称为补充字符.Java 5中通过JSR-204添加了对补充字符的支持; Java 5和6支持Unicode 4.0.

因此,如果不同的编程语言不同地实现Unicode支持,请不要感到惊讶.

另一方面,PHP(!!)和Ruby在开始时没有内置Unicode支持.

PS:支持v5.1的Unicode将在Java 7中完成.


Kra*_*ker 5

Java和.NET语言,正如其他评论者所指出的那样,尽管Java的字符串是UTF-16而不是UCS或UTF-8.(当时,它似乎是一个明智的想法!现在显然UTF-8或UCS会更好.)Python 3实际上是Python 1.x和2.x中不同的,不兼容的语言,因此它也符合条件.

1992年左右的Plan9语言可能是第一个这样做的:他们的方言C rc,Alef mk,ACID等都是支持Unicode的.他们采用了非常简单的方法,即任何非ASCII的都是标识符字符.从1993年的主题看他们的论文.(这是发明UTF-8的项目,这意味着他们可以以一种非常兼容的方式完成这项工作,特别是在所有程序中都没有管道二进制文本.)

支持非ASCII标识符的其他语言包括当前的PHP.