在各种编程语言Unicode支持(Unicode Support in Various Progra

2019-06-24 00:46发布

我想有一个规范的地方,汇集有关各种语言的Unicode支持信息。 它是核心语言的一部分吗? 难道在图书馆提供的? 它是不可用呢? 是否有一种语言的Unicode信息资源流行的资源? 每回答一个语言吧。 此外,如果你可以做一个标题,将使其更容易找到的语言。

Answer 1:

Perl的

Perl已经内置了支持Unicode居多。 有点。 从的perldoc:

  • perlunitut -教程在Perl使用Unicode。 主要是教在你应该和不应该尽可能做什么为Unicode绝对值。 涵盖基础。
  • perlunifaq -常见问题有关Unicode在Perl。
  • perluniintro -介绍到Unicode在Perl。 少了“说教”比perlunitut 。
  • perlunicode -因为当你绝对要知道一切有知道关于Unicode和Perl。


Answer 2:

蟒蛇3K

Python的3K(或3.0或3000)具有处理文本(Unicode)的数据和新的方法:
文字比。 数据,而非Unicode主场迎战 8位 。 又见Unicode指南 。



Answer 3:

Java的

同使用.NET,Java使用UTF-16内部: java.lang.String中

String表示,其中补充字符代理对 (见节表示的UTF-16格式的字符串的Unicode字符表示在Character类的更多信息)。 指数值是指char代码单元,因此增补字符用在两个位置String



Answer 4:

HQ9 +

Q指令在大多数实现完整的Unicode支持。



Answer 5:

德尔福

德尔福2009年完全支持Unicode。 他们已经改变了执行string默认为16位的Unicode编码,而且大多数库,包括第三方的人支持Unicode。 见马可坎图的德尔福和Unicode 。

此前的2009年德尔福,对Unicode的支持是有限的,但有WideCharWideString存储16位编码的字符串。 见Unicode的Delphi中获取更多信息。

请注意,您仍然可以开发双语CJKV应用程序,而不使用Unicode。 例如, 移位JIS编码的字符串为日语可以使用普通的存储AnsiString



Answer 6:

谷歌的围棋编程语言支持Unicode与UTF-8的作品。



Answer 7:

蟒蛇

Python 2中有类strunicodestr对象存储的字节, unicode对象存储UTF-16字符。 大多数的库函数支持(如os.listdir('.')返回一个列表stros.listdir(u'.')返回一个列表unicode对象)。 两者都有encodedecode方法。

Python 3中基本上改名unicodestr 。 Python 3中相当于str将是类型bytesbytes具有decodestrencode方法。 因为Python 3.3 str对象内部使用多种编码的一个,以节省内存。 对于Python程序员它仍然看起来像一个抽象的Unicode序列。

Python支持:

  • 编码/解码
  • 正常化
  • 简单大小写转换和分裂的空白
  • 他们的名字查找字符

Python不支持/有有限的支持:

  • 核对(有限的)
  • 特殊情况下的转化在没有1:下部和上部壳体之间的字符1映射
  • 正则表达式( 它在工作 )
  • 文本分割
  • 双向文本处理

另请参阅: 有关Unicode在Python真相



Answer 8:

JavaScript的

貌似JS 1.3之前有对Unicode的支持。 作为1.5,UTF-8,UTF-16和UCS-2都被支持。 您可以在字符串中,regexs和标识使用Unicode转义序列。 资源



Answer 9:

.NET(C#,VB.NET,...)

.NET存储串内部作为一个序列System.Char对象。 一个System.Char表示UTF-16 代码单元 。

从MSDN文档System.Char

.NET框架使用的字符结构来表示一个Unicode字符。 Unicode标准识别与称为码点的唯一的21位标量数字每个Unicode字符,并限定了UTF-16编码形式,指定的码点是如何编码成一个或多个16位的值的序列。 每个16位值到0xFFFF从十六进制为0x0000范围,并存储在一个字符的结构。

其他资源:

  • 字符串在.NET和C# (由乔恩飞碟双向)。


Answer 10:

TCL

因为Tcl的字符串已经Unicode字符序列的Tcl 8.1 (1999)。 在内部,它们被动态UTF-8之间(严格变形的相同的修饰的UTF-8作为爪哇由于处理U+00000个字符)和UCS-2(在主机端序和BOM,当然)。 所有的外部串(有一个例外),其中包括那些用于与OS进行通信,在内部的Unicode被转化成任何编码是所必需的主机(或在通信信道上被手动配置)之前。 唯一的例外是用于其中数据的两个通信信道之间的复制用共同的编码(和其他一些未限制这里有密切关系),其中使用直接免费复制二进制传输。

在BMP之外的字符目前没有处理内部或外部。 这是一个已知的问题。



Answer 11:

R6RS方案

需要的Unicode 5.1的实现。 所有字符串都在“Unicode格式”。



Answer 12:

锈病的字符串( std::String&str )总是有效的UTF-8,而不要使用空终结,并因此不能被索引作为数组一样,他们可以在C / C ++等,它们可以是有些切片用围棋一样.get ,因为1.20,需要提醒的是,如果你尝试切片码点的中间就会失败。

拉斯特也有OsStr / OsString与主机操作系统进行交互。 这是在Unix字节阵列(包含任何字节序列)。 在Windows上的WTF-8(A超集的UTF-8,处理被允许在Windows和Javascript的格式不正确的Unicode字符串), &strString可自由转换到OsStrOsString ,但需要检查隐蔽其他办法。 无论是由于没有对无效的Unicode,或者Unicode替换字符替换。 (还有Path / PathBuf ,这都只是围绕包装OsStr / OsString )。

也有CStrCString类型,其表示空终止C字符串,象OsStr在Unix它们可以包含任意个字节。

锈不直接支持UTF-16。 但可以转换OsStr到UCS-2的窗口。



Answer 13:

Common Lisp的(SBCL和CLISP)

根据此 , SBCL和CLISP支持Unicode。



Answer 14:

Objective-C的

无内置,除无论发生什么可用的C串库的一部分。

但是,一旦你添加框架...

基金会(可可和可可触摸)和核心基础

的NSString和CFString字符串各自实现一个完全基于Unicode字符串类(实际上是几类,作为一个实现细节)。 两人都是“免费电话 - 桥接”,以便为一体的API可以与其他的情况下使用,反之亦然。

对于并不一定代表文本数据,还有的NSData和CFData。 的NSString提供了方法和CFString字符串提供函数来编码文本转换成数据,并从数据解码文本。 核心基金会支持超过一百种不同的编码,包括所有形式的因此UTF。 该编码被分为两组: 内置编码 ,这是无处不在的支持,以及外部编码 ,这是至少支持Mac OS X.

的NSString提供标准化为形式d,KD,C,或KC的方法。 每次返回一个新字符串。

两者的NSString和CFString字符串提供各种各样的比较/核对选项。 以下是基金会比较选项标志和核心基础的比较选项标志 。 他们是不是所有的代名词; 例如,核心基础使文字(严格码点为基础)比较的默认值,而基金会使得非字面比较(允许带有重音字符比较相等)的缺省值。

需要注意的是Core Foundation的不需要的Objective-C; 事实上,这是创造了相当多提供最基础的功能,以碳程序员,谁使用直C或C ++。 不过,我怀疑最现代化的用法是在可可或可可触摸方案,这些都是用Objective-C或Objective-C ++。



Answer 15:

C / C ++

C

ÇC99已经支持unicode没有内置前。 它使用零门终止字符阵列( char*char[]为字符串。 甲char是由一个字节(8位)指明。

C99指定wcs中添加到旧-functions str -functions(例如strlen - > wcslen )。 这些函数wchar_t*代替char*wchar_t代表宽字符类型。 的大小wchar_t是编译器特定的,并且可以是作为8位的小。 虽然不同的编译器确实使用不同大小,它通常是16位(UTF-16)或32位(UTF-32)。

大多数C库函数是透明的UTF-8。 例如,如果您的操作系统支持UTF-8(和UTF-8被配置为你的系统的字符集),然后使用创建文件fopen传递一个UTF-8编码的字符串将创建一个正确命名的文件。

C ++

在C ++的情况非常相似( std::string - > std::wstring ),但也有得到某种至少努力支持unicode标准库 。



Answer 16:

d

d支持UTF-8,UTF-16,和UTF-32(炭,WCHAR,和dchar,分别地)。 与所有类型的表,可以发现这里 。



Answer 17:

PHP

已经有一个完整的线程在此对SO!



Answer 18:

红宝石

我能找到Ruby的唯一的东西是相当老不是太大的rubist的,我不知道它是多么准确。

为了记录在案,红宝石不支持UTF-8,而不是多字节。 在内部,它通常假定字符串字节向量,但也有库和技巧,你通常可以用它来把事情的工作。

研究发现, 在这里 。

Ruby 1.9的

Ruby 1.9的附加编码为字符串。 二进制字符串使用的编码“ASCII-8BIT”。 虽然默认编码通常是UTF-8的任何现代系统上,你不能假设所有第三方的库函数总是返回一个字符串在此编码。 它可能返回任何其他编码(例如,一些YAML解析器做,在某些情况下)。 如果您连接不同编码的两个字符串你可能会得到一个Encoding::CompatibilityError



Answer 19:

电弧没有任何Unicode支持。 然而 。



Answer 20:

的Lua 5.3有一个内置在utf8库,它处理UTF-8编码。 它可以让你一系列的代码点转换为相应的字节序列和周围的其他方法,得到的长度(码点在字符串中的数字),遍历码点在一个字符串,获得第n个码点的字节位置。 它还提供了一种图案,通过在模式匹配函数中使用string库,将匹配一个UTF-8字节序列。

LUA 5.3具有可以在字符串中使用Unicode代码点转义序列(例如, "\u{61}""a" )。 他们转换为UTF-8字节序列。

LUA源代码可以是UTF-8或其中ASCII字符占用一个字节的任何编码进行编码。 UTF-16和UTF-32不被香草Lua解释理解。 但是字符串可以包含任何编码,或者任意的二进制数据。



文章来源: Unicode Support in Various Programming Languages