在标识符中使用unicode有哪些经验?

时间:2008-11-16 20:41:04

标签: unicode uniqueidentifier

现在,更多语言正在使用unicode,这是一件好事。但它也带来了危险。在过去那里有一个区分1和1和0以及O的麻烦。但是现在我们有了一个全新的类似字符范围。

例如:

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

有了这些,创建一些非常难以发现的错误并不困难。

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

6 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:6)

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

我认为您的ANSI专用政策非常出色。我真的没有看到任何可行的原因(只要你的大多数开发人员都是英语,即使他们不是世界已经习惯了ANSI字符集)。

答案 2 :(得分:3)

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

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

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

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

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

答案 3 :(得分:1)

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

此外,一些不区分大小写的语言在使用之前会将标识符更改为小写,如果活动系统区域设置为土耳其语或阿塞拜疆语,则会导致问题。 see here for more info about Turkish locale problem。我知道PHP会这样做,it has a long standing bug

任何使用土耳其语语言环境比较字符串的软件中都存在此问题,而不仅仅是语言实现本身,只是指出。它会导致many headaches

答案 4 :(得分:0)

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

适合我,因为我在拉丁美洲。

实际上,一旦锻炼出来,整个过程就变得顺畅了。

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

答案 5 :(得分:0)

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

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

即使您决定不使用unicode,当您使用具有此功能的库时,问题也会重新出现。所以你必须在一定程度上忍受它。