C#/.NET 实际上仅限于 Unicode 6.0 吗?
Is C#/.NET actually limited to Unicode 6.0?
所以,我在 Stack Overflow (the question) 上看到了这个问题,上面写着;
Update 2: This note on Roslyn confirms that the underlying platform defines the Unicode support for the compiler, and in the link to the code it explains that C# 6.0 supports Unicode 6.0 and up (with a breaking change for C# identifiers as a result).
所以我现在想知道我是否可以读取包含 unicode 13.0 字符的文件,或者我是否遗漏了什么?
这里有三件事在起作用:
- 编译器,仅与源文件处理相关。如果您尝试编译包含编译器无法识别的字符的代码,我会 期望 编译器根据其 Unicode 类别将这些字符视为“未知”。 (所以你不能在标识符中使用它们,它们不算作空格等)
- 框架,当您使用对字符串进行操作的方法或
char.GetUnicodeCategory()
之类的方法时,它是相关的 - 但它可以让您从文件加载数据,即使它不“理解”某些字符。
- 无论应用程序如何处理数据 - 通常数据只是以不透明的方式从一个系统传播到另一个系统,但通常还会对其执行其他操作和检查。
如果您需要在数据库中存储一些文本,然后将其显示在用户的屏幕上,那么该文本完全有可能通过各种不理解某些字符的系统。 可以成为一个问题,在以下方面:
- 相等性和排序:如果两个字符串 应该 在 case-insensitive 比较中相等,但系统不知道这些字符串中的某些字符,它可能会得到错误的答案
- 验证:如果一个字符串只包含某些 Unicode 类别中的字符,但系统不知道字符属于哪个类别,逻辑上它不确定该字符串是否有效。
- 组合和规范化:再次在验证方面,如果您的系统旨在验证一个字符串只有(比如说)5 个字符长,但它处于特定的规范化形式,那么您需要能够执行标准化以获得正确答案。
(毫无疑问还有很多类似的地方。)
编译器基本上是其中最不重要的部分 - 框架的支持级别很重要,但过时是否真的是个问题与否将取决于数据发生了什么。
所以,我在 Stack Overflow (the question) 上看到了这个问题,上面写着;
Update 2: This note on Roslyn confirms that the underlying platform defines the Unicode support for the compiler, and in the link to the code it explains that C# 6.0 supports Unicode 6.0 and up (with a breaking change for C# identifiers as a result).
所以我现在想知道我是否可以读取包含 unicode 13.0 字符的文件,或者我是否遗漏了什么?
这里有三件事在起作用:
- 编译器,仅与源文件处理相关。如果您尝试编译包含编译器无法识别的字符的代码,我会 期望 编译器根据其 Unicode 类别将这些字符视为“未知”。 (所以你不能在标识符中使用它们,它们不算作空格等)
- 框架,当您使用对字符串进行操作的方法或
char.GetUnicodeCategory()
之类的方法时,它是相关的 - 但它可以让您从文件加载数据,即使它不“理解”某些字符。 - 无论应用程序如何处理数据 - 通常数据只是以不透明的方式从一个系统传播到另一个系统,但通常还会对其执行其他操作和检查。
如果您需要在数据库中存储一些文本,然后将其显示在用户的屏幕上,那么该文本完全有可能通过各种不理解某些字符的系统。 可以成为一个问题,在以下方面:
- 相等性和排序:如果两个字符串 应该 在 case-insensitive 比较中相等,但系统不知道这些字符串中的某些字符,它可能会得到错误的答案
- 验证:如果一个字符串只包含某些 Unicode 类别中的字符,但系统不知道字符属于哪个类别,逻辑上它不确定该字符串是否有效。
- 组合和规范化:再次在验证方面,如果您的系统旨在验证一个字符串只有(比如说)5 个字符长,但它处于特定的规范化形式,那么您需要能够执行标准化以获得正确答案。
(毫无疑问还有很多类似的地方。)
编译器基本上是其中最不重要的部分 - 框架的支持级别很重要,但过时是否真的是个问题与否将取决于数据发生了什么。