特殊登录代码-使用或不使用

本文关键字:登录 代码 | 更新日期: 2023-09-27 18:26:56

我在一个c#应用程序代码中观察到,代码如下:

string message = String.Format("{0}", "▼");

这个代码正确吗?这个标志不会吗?"▼"将来会导致任何错误?

特殊登录代码-使用或不使用

它不是代码中的特殊字符,而是存储在变量中的字符串值。只要它是一个有效的Unicode(这个字符就是),就没有人在乎。

然而,String.Format("{0}", "▼");部分没有太大意义
简单的string message = "▼";就可以了。

您甚至可以使用char mySpecialChar = '▼';,这将更有意义,因为您不需要单个字符的字符串变量。

来自C#规范:

源文件是Unicode字符的有序序列。

为了实现最大的可移植性,建议使用UTF-8编码对文件系统中的文件进行编码。

UTF-8是Unicode字符集的几种编码(从字符代码到字节序列的映射)之一。

我不知道你为什么提到▼作为特殊字符。它在C#源代码中的使用与$的使用相同。它在Symbol Other[So]Unicode类别中

因此,就支持您正在使用的编程环境的工具而言,它是正确的。

但是——我提出这个问题是因为其他人声称有这种不幸——如果你使用不支持Unicode/UUTF-8的工具,那么你可能会发现一个较低的公分母,将U+0000到U+007F范围之外的字符写成C#Unicode转义序列(''uHHHH),并且仍然保存为UTF-8,因为ASCII处理器会对它们进行相同的解释。可以用这种格式重写每个C#源文件字符(无论是在文本stringchar中,还是在标识符中)但是,如果您的工具不支持C#源文件的UTF-8,那么您的项目中的其他文本文件可能会出现问题


至于UI可以以及如何显示特定字符,这取决于系统上可用的渲染器和字体。如果Unicode字符串在不同的字符集中呈现,则呈现器具有选项(抛出异常、删除、替换类似字符或替换字符)。WinForms以Unicode呈现,网页通常使用Unicode,控制台程序通常不使用Unicode。要检查或更改控制台的编码(代码页),请使用chcp(Linux:locale)。

一旦字符被输出,用户界面就必须有一个支持它们的字体。如果没有,则通常会显示替换字形(与此字符的字形相同▯).在WinForms中,您可以为每个控件选择一种字体,因此这取决于您自己。对于网页,您可以为每个文本元素建议字体,甚至可以将字体作为HTTP资源提供。控制台由用户设置为一种字体;因此,这种情况可能是最有问题的。要检查或更改Windows控制台的字体,请右键单击标题栏并选择"属性"。

我的控制台(Windows的cmd.exe)默认为代码页437和Lucinda控制台,它们可以处理和显示▼.

所以,无论编码如何,当应用程序在UI上显示这个符号时,这个符号总是一样的?