gpt4 book ai didi

c# - 关于字符类,哪个 .NET 平台和哪个版本的 Windows 支持哪个版本的 Unicode?

转载 作者:IT王子 更新时间:2023-10-29 04:19:20 25 4
gpt4 key购买 nike

更新问题 ¹

关于字符类、比较、排序、规范化和排序规则,哪些 .NET 平台支持哪些 Unicode 版本?

原始问题

我有点模糊地记得读过 .NET 支持 Unicode 3.0 版,并且内部 UTF-16 编码不是真正的 UTF-16,而是实际上使用 UCS-2,这不一样。例如,似乎 U+FFFF 以上的字符是不可能的,即考虑:

string s = "\u1D7D9"; // ("Mathematical double-struck digit one") 

它存储字符串 "ᵽ9"

我基本上是在寻找以下问题答案的权威引用:

  • 如果在 .NET 中它不是真正的 UTF-16,那它是什么?
  • .NET 支持哪个版本的 Unicode?
  • 如果最近的版本不受支持或在不久的将来没有计划,是否有人知道(非)商业库或我如何解决此问题?

¹) 随着时间的推移,我更新了问题,对于答案和更大的社区来说,这似乎更合适。我留下了原来的问题,而不是在评论中回答了哪些部分。此外,旧的 UCS-2(无代理)用于现在古老的 32 位 Windows 版本,.NET 一直在内部使用 UTF-16(带代理)。

最佳答案

在内部,.NET 是 UTF-16。在某些情况下,例如当 ASP.NET 写入响应时,默认情况下它使用 UTF-8。他们都可以处理更高的位面。

人们有时将 .NET 称为 UCS2 的原因是(我认为,因为我看不到其他原因)Char 严格来说是 16 位的,不能使用单个 Char 来表示上平面。但是,Char 确实具有静态方法重载(例如 Char.IsLetter),可以对字符串中的高级 UTF-16 字符进行操作。字符串存储为真正的 UTF-16。

您可以直接使用大写字母 \U 寻址高 Unicode 代码点 - 例如"\U0001D7D9" - 但同样,只在字符串内部,不在字符内部。

至于 Unicode 版本,from the MSDN documentation :

“在 .NET Framework 4 中,排序、大小写、规范化和 Unicode 字符信息与 Windows 7 同步并符合 Unicode 5.1 标准。”/p>

更新 1:然而,值得注意的是,这并不意味着支持 全部 Unicode 5.1 - 无论是在 Windows 7 还是在 .NET 4.0

Windows 8 targets Unicode 6.0 - 我猜 .NET Framework 4.5 可能与此同步,但没有发现任何来源证实这一点。再次强调,这并不意味着整个标准都已实现。

更新 2: This note on Roslyn确认底层平台定义了编译器的 Unicode 支持,并且在 link to the code 中它解释了 C# 6.0 支持 Unicode 6.0 及更高版本(因此对 C# 标识符进行了重大更改)。

更新 3:自 .NET 版本 4.5 起 new class SortVersion通过调用静态属性 SortVersion.FullVersion 来获取支持的 Unicode 版本.在 the same page ,Microsoft 解释说.NET 4.0 在所有平台上都支持 Unicode 5.0,而 .NET 4.5 在 Windows 7 上支持 Unicode 5.0,在 Windows 8 上支持 Unicode 6.0。这与 the official "what is new" statement here 略有不同。 ,分别讨论版本 5.x 和 6.0。根据我自己(编辑:Abel)的经验,在大多数情况下,似乎在 .NET 4.0 中,至少字符类支持 Unicode 5.1,但我没有测试排序、规范化和排序规则。这似乎符合MSDN中所说的如上所述。

关于c# - 关于字符类,哪个 .NET 平台和哪个版本的 Windows 支持哪个版本的 Unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9162131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com