8

如今,越来越多的语言使用 unicode,这是一件好事。但这也带来了危险。过去很难区分 1 和 l 以及 0 和 O。但现在我们有了全新的相似字符范围。

例如:

ì, î, ï, ı, ι, ί, ׀ ,أ ,آ, ỉ, ﺃ

有了这些,创建一些很难找到的错误并不难。

在我的工作中,我们决定使用 ANSI 字符作为标识符。有没有人使用 unicode 标识符,有什么经验?

4

6 回答 6

10

除了您提到的类似字符错误以及使用不同编辑器时可能出现的技术问题(w/BOM、wo/BOM、通过复制粘贴在同一文件中使用不同编码,这仅在实际存在无法编码的字符时才会出现问题ASCII 等),我发现在标识符中使用 Unicode 字符是不值得的。英语已成为开发的通用语,您在编写代码时应该坚持使用它。

对于任何开发人员可以在世界任何地方看到的代码(开源或与产品一起出售的代码),我发现尤其如此。

于 2008-11-16T20:55:04.437 回答
6

我在 C# 源文件中使用 unicode 的经历是灾难性的,即使它是日语(所以没有什么可以与“i”混淆)。Source Safe 不喜欢 unicode,当您发现自己在 Word 中手动修复损坏的源文件时,您就知道有些地方不对劲。

我认为您的仅 ANSI 政策非常好。我真的看不出任何不可行的理由(只要您的大多数开发人员都是英语,即使他们不习惯于 ANSI 字符集)。

于 2008-11-16T20:57:11.983 回答
3

我认为将整个 ANSI 字符集用于标识符并不是一个好主意。无论您使用的是哪个 ANSI 代码页,您的 ANSI 代码页都包含一些其他 ANSI 代码页不包含的字符。所以我建议坚持使用 ASCII,没有高于 127 的字符代码。

在实验中,我使用了比 ASCII 更广泛的 ANSI 字符,即使在标识符中也是如此。一些编译器接受了它。一些 IDE 需要为可以显示字符的字体设置选项。但我不建议将其用于实际用途。

现在谈谈 ANSI 代码页和 Unicode 之间的区别。

在实验中,我以 Unicode 存储源文件并在标识符中使用 Unicode 字符。一些编译器接受了它。但我仍然不建议将其用于实际用途。

有时我以 Unicode 存储源文件,并在某些字符串中使用转义序列来表示 Unicode 字符值。这是一个重要的做法,我强烈推荐它。当其他程序员在他们的字符串中使用 ANSI 字符时,我尤其不得不这样做,并且他们的 ANSI 代码页与其他 ANSI 代码页不同,因此字符串被破坏并导致编译错误或有缺陷的结果。解决这个问题的方法是使用 Unicode 转义序列。

于 2008-11-17T00:37:39.683 回答
1

我还建议使用 ascii 作为标识符。如果编辑器/ide/编译器等都支持区域设置并设置为使用相同的编码,则注释可以保留为非英语语言。

此外,一些不区分大小写的语言在使用前会将标识符更改为小写,如果活动系统语言环境是土耳其语或阿塞拜疆语,则会导致问题。有关土耳其语言环境问题的更多信息,请参见此处。我知道 PHP 会这样做,并且它有一个长期存在的错误

这个问题也存在于任何使用土耳其语言环境比较字符串的软件中,不仅仅是语言实现本身,只是要指出。它引起许多头痛

于 2008-11-16T23:19:17.783 回答
0

这取决于您使用的语言。例如,在 Python 中,我更容易坚持使用 unicode,因为我的应用程序需要使用多种语言。因此,当我从某个我不认识的人(某物)那里得到一个文件时,我假设为 Latin-1 并翻译为 Unicode。

为我工作,因为我在拉丁美洲。

实际上,一旦一切都解决了,整个事情就变得一帆风顺了。

当然,这取决于选择的语言。

于 2008-11-17T01:55:16.890 回答
0

我从来没有使用 unicode 作为标识符名称。但我想到的是 Python 在版本 3 中允许使用 unicode 标识符:PEP 3131

另一种广泛使用 unicode 的语言是Fortress

即使您决定不使用 unicode,当您使用使用 unicode 的库时,问题也会再次出现。所以你必须在一定程度上忍受它。

于 2009-01-23T09:15:57.233 回答