C#/.NET实际上仅限于Unicode 6.0吗



所以,我在Stack Overflow上看到了这个问题,它说;

Update2:Roslyn上的这篇注释证实了底层平台定义了对编译器的Unicode支持,并在代码链接中解释了C#6.0支持Unicode 6.0及更高版本(因此对C#标识符进行了突破性的更改(。

所以我现在想知道,例如,我是否可以读取一个包含unicode 13.0字符的文件,或者我遗漏了什么?

这里有三件事在起作用:

  • 编译器,它只与源文件处理相关。如果你试图编译包含编译器不知道的字符的代码,我会期望编译器将这些字符视为";未知";就其Unicode类别而言。(因此,您将无法在标识符中使用它们,它们不会被视为空白等。(
  • 框架,当您使用对字符串进行操作的方法或类似char.GetUnicodeCategory()的东西时,它是相关的,但它将允许您从文件加载数据,即使它没有";理解";一些角色
  • 无论应用程序对数据做什么——通常数据只是以不透明的方式在系统之间传播,但通常也会对其执行其他操作和检查

如果您需要在数据库中存储一些文本,然后将其显示在用户屏幕上,则该文本完全有可能通过不理解某些字符的各种系统。可能是一个问题,就以下领域而言:

  • 相等和排序:如果两个字符串在不区分大小写的比较中应该相等,但系统不知道这些字符串中的一些字符,则可能会得到错误的答案
  • 验证:如果一个字符串只包含某些Unicode类别中的字符,但系统不知道该字符属于哪个类别,那么从逻辑上讲,它也不确定该字符串是否有效
  • 组合和规范化:再次就验证而言,如果您的系统旨在验证一个字符串只有(比如(5个字符长,但这是一种特定的规范化形式,那么您需要能够执行该规范化才能得到正确的答案

(毫无疑问,还有很多类似的其他领域。(

编译器基本上是其中最不重要的部分-它确实影响了框架的支持级别,但是否真的有点过时将取决于数据发生了什么。

最新更新