我希望有一个规范的地方可以汇集各种语言的Unicode支持信息。它是核心语言的一部分吗?它是在图书馆提供的吗?它根本不可用吗?是否有一种资源流行的语言中的Unicode信息资源?请回答一种语言。此外,如果您可以使语言成为更容易找到的标题。
答案 0 :(得分:11)
Perl主要内置Unicode支持。有点。来自perldoc:
答案 1 :(得分:8)
Python 3k(或3.0或3000)具有处理文本(unicode)和数据的新方法:
Text Vs. Data Instead Of Unicode Vs. 8-bit。另请参阅Unicode HOWTO。
答案 2 :(得分:7)
在大多数实现中,Q命令具有完整的Unicode支持。
答案 3 :(得分:7)
与.NET相同,Java在内部使用UTF-16:java.lang.String
String
表示UTF-16格式的字符串,其中补充字符由代理项对表示(请参阅Unicode Character Representations部分在Character
课程中获取更多信息。索引值是指char
个代码单位,因此补充字符使用String
中的两个位置。
答案 4 :(得分:4)
Google的Go programming language支持Unicode,可与UTF-8配合使用。
答案 5 :(得分:4)
Delphi 2009完全支持Unicode。他们已将string
的实现更改为默认为16位Unicode编码,大多数库(包括第三方库)都支持Unicode。见MarcoCantù的Delphi and Unicode。
在Delphi 2009之前,对Unicode的支持有限,但有WideChar
和WideString
来存储16位编码字符串。有关详细信息,请参阅Unicode in Delphi。
注意,您仍然可以在不使用Unicode的情况下开发双语CJKV应用程序。例如,日语的Shift JIS编码字符串可以使用普通AnsiString
存储。
答案 6 :(得分:4)
Python 2包含类str
和unicode
。 str
个对象存储字节,unicode
个对象存储UTF-16字符。大多数库函数都支持两者(例如os.listdir('.')
返回str
列表,os.listdir(u'.')
返回unicode
个对象列表。两者都有encode
和decode
方法。
Python 3基本上将unicode
重命名为str
。相当于str
的Python 3将是bytes
类型。 bytes
有decode
和str
encode
方法。 Since Python 3.3 str
个对象在内部使用多种编码之一以节省内存。对于Python程序员来说,它仍然看起来像一个抽象的unicode序列。
Python支持:
Python不支持/对以下内容的支持有限:
答案 7 :(得分:3)
.NET在内部将strings存储为一系列System.Char
个对象。一个System.Char
代表UTF-16 code unit。
来自System.Char
上的MSDN文档:
.NET Framework使用 Char 结构来表示Unicode 字符。 Unicode标准 使用标识每个Unicode字符 一个独特的21位标量数,称为a 代码点,并定义UTF-16 编码形式,指定如何 代码点被编码成一个序列 一个或多个16位值。每 16位值的范围是十六进制 0x0000到0xFFFF并存储在 Char 结构。
其他资源:
答案 8 :(得分:3)
R6RS计划
需要Unicode 5.1的实现。所有字符串都是'unicode格式'。
答案 9 :(得分:3)
自Tcl 8.1(1999)以来,Tcl字符串一直是Unicode字符序列。在内部,它们在UTF-8之间动态变换(由于处理U+00000
字符而严格the same Modified UTF-8 as Java)和UCS-2(当然,在主机字节序和BOM中)。所有外部字符串(有一个例外),包括那些用于与OS通信的字符串,在转换为主机所需的任何编码(或在通信通道上手动配置)之前都是内部Unicode。例外情况是数据为copied between two communications channels,其中使用了通用编码(以及其他一些与其密切相关的限制),其中使用了直接无副本二进制传输。
BMP以外的字符目前无法在内部或外部处理。这是一个众所周知的问题。
答案 10 :(得分:3)
在JS 1.3之前看起来不支持Unicode。从1.5开始,支持UTF-8,UTF-16和UCS-2。您可以在字符串,正则表达式和标识符中使用Unicode转义序列。 Source
答案 11 :(得分:3)
Rust的字符串(std::String
和&str
)始终是有效的UTF-8,并且不使用空终止符,因此不能将其编入索引作为数组,就像它们可以在C中一样/ C ++等。从1.20开始,它们可以像使用.get
一样切片,但需要注意的是,如果尝试切片代码点的中间部分,它将会失败。
Rust还有OsStr
/ OsString
用于与主机操作系统交互。它是Unix上的字节数组(包含任何字节序列)。在Windows上它是WTF-8(UTF-8的超集,它处理Windows和Javascript中允许的不正确形成的Unicode字符串),&str
和String
可以自由转换为{{1 }或OsStr
,但要求检查以另一种方式转换。通过对无效的unicode进行失败,或者使用Unicode替换char进行替换。 (还有OsString
/ Path
,它们只是PathBuf
/ OsStr
的包装。
还有OsString
和CStr
类型,表示Null终止的C字符串,如Unix上的CString
,它们可以包含任意字节。
Rust不直接支持UTF-16。但是可以在Windows上将OsStr
转换为UCS-2。
答案 12 :(得分:2)
D支持UTF-8,UTF-16和UTF-32(分别为char,wchar和dchar)。可以找到包含所有类型的表格here。
答案 13 :(得分:2)
没有内置的,除了C字符串库中可用的任何内容。
但是,一旦添加了框架......
NSString和CFString各自实现一个完全基于Unicode的字符串类(实际上是几个类,作为实现细节)。这两个是“免费桥接”,因此一个API可以与另一个的实例一起使用,反之亦然。
对于不一定代表文本的数据,有NSData和CFData。 NSString提供方法,CFString提供将文本编码为数据和从数据中解码文本的函数。 Core Foundation支持超过一百种不同的编码,包括所有形式的UTF。编码分为两组:built-in encodings,在任何地方都受支持,external encodings,至少在Mac OS X上受支持。
NSString提供了规范化表格D,KD,C或KC的方法。每个都返回一个新字符串。
NSString和CFString都提供了各种各样的比较/整理选项。以下是Foundation's comparison-option flags和Core Foundation's comparison-option flags。它们并非都是同义词;例如,Core Foundation使文字(基于严格的基于代码点)的比较成为默认值,而Foundation使非文字比较(允许带重音的字符比较相等)作为默认值。
请注意,Core Foundation不需要Objective-C;实际上,它的创建几乎是为了提供使用直接C或C ++的Foundation to Carbon程序员的大部分功能。但是,我怀疑它的大多数现代用法都在Cocoa或Cocoa Touch程序中,这些程序都是用Objective-C或Objective-C ++编写的。
答案 14 :(得分:2)
答案 15 :(得分:2)
char*
或char[]
)作为字符串。 char
由一个字节(8位)指定。
C99指定wcs
- 除旧str
- 函数之外的函数(例如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 ++中的情况非常相似(std::string
- > std::wstring
),但至少要努力获得某种unicode support in the standard library。
答案 16 :(得分:1)
SO上已经有entire thread了!
答案 17 :(得分:1)
我能找到的唯一可以用于Ruby的东西已经很老了,而且不是很麻烦,我不确定它有多精确。
为了记录,Ruby确实支持utf8,但不支持多字节。在内部,它通常假定字符串是字节向量,尽管通常可以使用库和技巧来使事情有效。
找到here。
Ruby 1.9将编码附加到字符串。二进制字符串使用编码“ASCII-8BIT”。虽然在任何现代系统上默认编码通常都是UTF-8,但您不能假设所有第三方库函数始终返回此编码中的字符串。它可能返回任何其他编码(例如,某些yaml解析器在某些情况下会这样做)。如果您连接两个不同编码的字符串,则可能获得Encoding::CompatibilityError
。
答案 18 :(得分:0)
答案 19 :(得分:0)
Lua 5.3有一个内置的utf8
库,它处理UTF-8编码。它允许您将一系列代码点转换为相应的字节序列,反之亦然,获取长度(字符串中的代码点数),迭代字符串中的代码点,获取的字节位置n 代码点。它还提供了一个模式,供string
库中的模式匹配函数使用,它将匹配一个UTF-8字节序列。
Lua 5.3具有Unicode代码点转义序列,可用于字符串文字(例如,"\u{61}"
用于"a"
)。它们转换为UTF-8字节序列。
Lua源代码可以用UTF-8编码,也可以用ASCII字符占用一个字节的任何编码。 vanilla Lua解释器不理解UTF-16和UTF-32。但字符串可以包含任何编码或任意二进制数据。