我应该默认使用Unicode字符串吗?

20 投票
6 回答
3877 浏览
提问于 2025-04-15 12:51

在用Python编程时,选择Unicode字符串而不是普通字符串算不算一种好习惯呢?我主要在Windows平台上工作,现在大多数字符串类型都是Unicode(比如说.NET的字符串,新的C++项目默认开启了'_UNICODE')。所以我觉得使用非Unicode字符串的情况比较少见。无论如何,我对Python开发者在实际项目中是怎么做的很感兴趣。

6 个回答

13

你提这个问题,我猜你是在用Python 2.x版本。

Python 3.0在字符串表示上改动很大,现在所有的文本都是unicode格式。
我建议在任何新项目中使用unicode,这样可以和Python 3.0的切换兼容(具体可以查看详细信息)。

13

没错,使用unicode。

这里有一些小提示:

  1. 在处理任何二进制格式的输入输出时,读取后要立即解码,写入前要立即编码,这样就不会把字符串和unicode混在一起。因为一旦混合,就容易出现Unicode编码解码错误。

  2. [这个可以忽略,我的解释反而让事情更复杂了。这个问题主要在转到Python 3时才需要关注,到了那时再考虑就行。]

  3. 常见的Python新手在处理Unicode时的错误(不是说你是新手,但可能有新手在看):不要搞混编码和解码。记住,UTF-8是一种编码方式,所以你是把Unicode编码成UTF-8,而从UTF-8解码回来。

  4. 不要轻易设置Python的默认编码(通过在sitecustomize.py里用setdefaultencoding),以你最常用的编码来设置。这样做会在你重新安装、换电脑或者突然需要用其他编码时带来麻烦。要明确指定编码。

  5. 记住,并不是Python 2的标准库里的所有方法都支持unicode。如果你给某个方法传入unicode,但它不工作,而它应该工作的,那就试试传入ascii看看。比如:urllib.urlopen(),如果你给它一个unicode对象而不是字符串,它会报一些不太有用的错误。

嗯,就这些我能想到的了!

19

根据我的经验,建议使用unicode。

在一个项目开始的时候,我们使用了普通的字符串,但随着项目的发展,我们不断添加新功能和使用新的第三方库。在这个过程中,非unicode和unicode字符串混在一起,导致一些功能开始出问题。我们花了很多时间去找出这些问题并修复它们。不过,有些第三方模块不支持unicode,结果在我们切换到unicode后也出现了故障(但这算是例外情况,不是常态)。

我还有一些经验是,我们需要重写一些第三方模块(比如SendKeys),因为它们不支持unicode。如果一开始就用unicode来写,那就会好很多 :)

所以我认为现在我们应该使用unicode。

附注:以上这些都是我个人的看法 :)

撰写回答