我希望有一个规范的地方来汇集有关各种语言的 Unicode 支持的信息。它是核心语言的一部分吗?图书馆提供吗?是不是根本不可用?是否有一种语言的 Unicode 信息的流行资源?请每个答案一种语言。另外,如果您可以将该语言设置为标题,则更容易找到。

没有正确的解决方案

其他提示

珀尔

大多数 Perl 都有内置的 Unicode 支持。有点。来自 perldoc:

  • 佩鲁尼图特 - 在 Perl 中使用 Unicode 的教程。很大程度上以绝对术语教导您应该做什么和不应该做什么,就 Unicode 而言。涵盖基础知识。
  • 佩鲁尼法克 - 有关 Perl 中 Unicode 的常见问题。
  • 佩鲁尼简介 - Perl 中的 Unicode 简介。不那么“说教” 佩鲁尼图特.
  • 佩鲁尼码 - 当您绝对必须了解有关 Unicode 和 Perl 的所有知识时。

Python 3k

Python 3k(或3.0或3000)具有处理文本(unicode)和数据的新方法:
文字与数据而不是Unicode Vs. 8位。另请参见 Unicode HOWTO

的Java

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

  

String表示UTF-16格式的字符串,其中补充字符代理项对表示(请参阅 Character类中的Unicode字符表示以获取更多信息) 。索引值是指char代码单位,因此补充字符在<=>中使用两个位置。

HQ9 +

在大多数实现中,Q命令具有完整的Unicode支持。

的Delphi

Delphi 2009完全支持Unicode。他们已将string的实现更改为默认为16位Unicode编码,大多数库(包括第三方库)都支持Unicode。请参阅Marco Cant <!>#249;的 Delphi和Unicode

在Delphi 2009之前,对Unicode的支持有限,但WideCharWideString存储了16位编码字符串。有关详细信息,请参阅 Delphi中的Unicode

注意,您仍然可以在不使用Unicode的情况下开发双语CJKV应用程序。例如,日语的 Shift JIS 编码字符串可以使用普通AnsiString存储。

开始

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

Python

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

Python 3 基本上已重命名 unicodestr. 。Python 3 相当于 str 将是类型 bytes. bytes 有一个 decodestr 一个 encode 方法。 从Python 3.3开始 str 对象内部使用多种编码之一以节省内存。对于 Python 程序员来说,它看起来仍然像一个抽象的 unicode 序列。

Python 支持:

  • 编码/解码
  • 正常化
  • 简单的大小写转换和空格分割
  • 按名字查找角色

Python 不支持/支持有限:

  • 整理(有限)
  • 小写和大写字符之间没有 1:1 映射的特殊情况转换
  • 常用表达 (它已经开始工作了)
  • 文本分割
  • 双向文本处理

也可以看看: Python 中 Unicode 的真相

的JavaScript

在JS 1.3之前看起来不支持Unicode。从1.5开始,支持UTF-8,UTF-16和UCS-2。您可以在字符串,正则表达式和标识符中使用Unicode转义序列。 来源

.NET(C#、VB.NET...)

.NET 商店 字符串 内部作为一个序列 System.Char 对象。一 System.Char 代表UTF-16 代码单元.

来自 MSDN 文档 System.Char:

.NET 框架使用 查尔结构代表Unicode字符。Unicode标准将每个Unicode字符识别一个称为代码点的唯一21位标量号码,并定义了UTF-16编码表格,该表格指定了如何将代码点编码为一个或多个16位值的序列。每个16位值的范围从十六进制的0x0000到0xffff,并且存储在一个 查尔 结构。

其他资源:

的Tcl

Tcl 8.1 (1999年)以来,Tcl字符串一直是Unicode字符序列)。在内部,它们在UTF-8之间动态变形(严格地相同的修改后的UTF-8)由于处理U+00000字符)和UCS-2(当然是主机字节序和BOM)的Java 。所有外部字符串(有一个例外),包括那些用于与OS通信的字符串,在转换为主机所需的任何编码(或在通信通道上手动配置)之前都是内部Unicode。例外情况是在两个通讯渠道之间复制使用通用编码(以及其他一些没有密切关系的限制),使用直接无副本二进制传输。

BMP以外的字符目前无法在内部或外部处理。这是一个众所周知的问题。

R6RS计划

需要Unicode 5.1的实现。所有字符串都是'unicode格式'。

Rust的字符串(std::String&str)始终是有效的UTF-8,并且不使用空终止符,因此不能将其编入索引,就像它们可以在C / C ++中一样,等等从1.20开始,它们可以像使用.get一样切片,但需要注意的是,如果你尝试在代码点的中间切片,它将会失败。

Rust还有OsStr / OsString与主机操作系统进行交互。它是Unix上的字节数组(包含任何字节序列)。在Windows上它是WTF-8(UTF-8的超集,它处理Windows和Javascript中允许的不正确形成的Unicode字符串),StringPath可以自由转换为PathBufCStr ,但需要检查以反转另一种方式。通过对无效的unicode进行失败,或者使用Unicode替换char进行替换。 (还有CString / <=>,它们只是<=> / <=>的包装。)

还有<=>和<=>类型,它们代表Null终止的C字符串,就像在Unix上的<=>一样,它们可以包含任意字节。

Rust不直接支持UTF-16。但是可以在Windows上将<=>转换为UCS-2。

Common Lisp(SBCL和CLisp)

根据 SBCL CLisp 支持Unicode。

的Objective-C

没有内置的,除了C字符串库中可用的任何内容。

但是,一旦添加了框架<!>#8230;

基金会(Cocoa和Cocoa Touch)和Core Foundation

NSString和CFString各自实现一个完全基于Unicode的字符串类(实际上是几个类,作为实现细节)。这两个是<!>#8220;免费桥接<!>#8221;因此,一个API可以与另一个的实例一起使用,反之亦然。

对于不一定代表文本的数据,有NSData和CFData。 NSString提供方法,CFString提供将文本编码为数据和从数据中解码文本的函数。 Core Foundation支持超过一百种不同的编码,包括所有形式的UTF。编码分为两组:内置编码,随处可见,外部编码,至少在Mac OS X上受支持。

NSString提供了规范化表格D,KD,C或KC的方法。每个都返回一个新字符串。

NSString和CFString都提供了各种各样的比较/整理选项。这是基金会的比较选项标志 Core Foundation的比较选项标志。它们并非都是同义词;例如,Core Foundation使文字(基于严格的基于代码点)的比较成为默认值,而Foundation使非文字比较(允许带重音的字符比较相等)作为默认值。

请注意,Core Foundation不需要Objective-C;实际上,它的创建几乎是为了提供使用直接C或C ++的Foundation to Carbon程序员的大部分功能。但是,我怀疑它的大多数现代用法都在Cocoa或Cocoa Touch程序中,这些程序都是用Objective-C或Objective-C ++编写的。

C / C ++

C

C99之前的C没有内置的unicode支持。它使用零终止字符数组(char*char[])作为字符串。 char由一个字节(8位)指定。

C99指定wcs - 除旧str - 函数之外的函数(例如strlen - <!> gt; wcslen)。这些函数采用wchar_t*而不是wchar_tfopen代表宽字符类型。 std::string的大小是特定于编译器的,可以小到8位。虽然不同的编译器确实使用不同的大小,但它通常是16位(UTF-16)或32位(UTF-32)。

大多数C库函数对UTF-8都是透明的。例如。如果您的操作系统支持UTF-8(并且UTF-8配置为您的系统字符集),则使用std::wstring传递UTF-8编码字符串创建文件将创建一个正确命名的文件。

C ++

C ++中的情况非常相似(<=> - <!> gt; <=>),但至少要努力获得某种标准库中的unicode支持

d

D支持UTF-8,UTF-16和UTF-32(分别为char,wchar和dchar)。可以在此处找到包含所有类型的表格。

PHP

在SO上已有整个主题

红宝石

我能找到的唯一可以用于Ruby的东西已经很老了,而且不是很麻烦,我不确定它有多精确。

  

为了记录,Ruby确实支持utf8,但不支持多字节。在内部,它通常假定字符串是字节向量,尽管通常可以使用库和技巧来使事情有效。

发现此处

Ruby 1.9

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

Arc

Arc没有任何unicode支持。 然而

的Lua

Lua 5.3有一个内置的utf8库,它处理UTF-8编码。它允许您将一系列代码点转换为相应的字节序列,反之亦然,获取长度(字符串中的代码点数),迭代字符串中的代码点,获取的字节位置n 代码点。它还提供了一个模式,供string库中的模式匹配函数使用,它将匹配一个UTF-8字节序列。

Lua 5.3具有Unicode代码点转义序列,可用于字符串文字(例如,"\u{61}" for "a")。它们转换为UTF-8字节序列。

Lua源代码可以用UTF-8编码,也可以用ASCII字符占用一个字节的任何编码。 vanilla Lua解释器不理解UTF-16和UTF-32。但字符串可以包含任何编码或任意二进制数据。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top