在Python中进行编码时,是否认为通过常规字符串选择Unicode字符串是一种很好的做法?我主要工作在Windows平台上,大多数字符串类型现在都是Unicode(即.NET字符串,'_UNICODE'在默认情况下在新的C++项目中打开等)。因此,我倾向于认为使用非Unicode字符串对象的情况是一种罕见的情况。无论如何,我很好奇Python实践者在真实世界的项目中做了些什么。默认情况下,我应该使用Unicode字符串吗?
回答
从我的做法 - 使用unicode。
在一个项目开始时,我们使用了字符串,但是我们的项目不断增加,我们正在实施新功能并使用新的第三方库。在与非Unicode/unicode字符串混乱一些功能开始失败。我们开始花时间对这些问题进行本地化并修复它们。但是,一些第三方模块不支持unicode,并且在切换到第三方模块后开始失败(但这不是排除规则)。
另外我有一些经验,当我们需要重写某些第三方模块(例如SendKeys),因为他们不支持unicode。如果它从头开始它会更好:)
所以我认为今天我们应该使用unicode。
P.S.所有那些乱七八糟的东西只是我的讨厌看法:)
如果您处理严重受限的内存或磁盘空间,请使用ASCII字符串。在这种情况下,你应该另外编写你的软件在C或更紧凑的东西:)
当你问这个问题,我想你使用的是Python 2.x.
Python 3.0在字符串表示中发生了很大变化,现在所有文本都是unicode。
我会在任何新项目中使用unicode - 以与切换到Python 3.0的兼容方式(请参阅details)。
是的,未来兼容性非常重要! – 2009-07-12 18:17:38
Mihails的附加评论我会说:使用Unicode,因为它是未来。在Python 3.0中,非Unicode将消失,并且我知道,所有的“U”-Prefixes都会遇到麻烦,因为它们也消失了。
它可能会非常棘手一直使用Unicode字符串在Python 2.x的 - 无论是因为有人无意中使用了更自然str(blah)
,他们的意思unicode(blah)
,忘记在字符串文字,第三方模块不兼容的u
前缀 - 不管。所以在Python 2.x中,只有必须使用unicode,并准备提供良好的单元测试覆盖率。
但是,如果您可以选择使用Python 3.x,则无需关心 - 字符串将是unicode,无需额外的工作。
是的,使用unicode。
一些提示:
在做任何类型的二进制格式的输入输出,看完之后直接解码并直接写入之前编码,让你永远需要混合字符串和unicode。因为混音往往会导致UnicodeEncodeDecodeErrors迟早。
[忘了这个,我的解释让它更加混乱。移植到Python 3只是一个问题,那么你可以关心它。]
Unicode的常见Python新手错误(不是说你是新手,但这可能会被新手读取):不要混淆编码和解码。请记住,UTF-8是一种编码,因此您将Unicode编码为UTF-8和DEcode。
不要陷入在Python中设置默认编码的诱惑(通过sitecustomize.py中的setdefaultencoding或类似的方法)到最常用的任何东西。如果您重新安装或移动到另一台计算机或突然需要使用其他编码,这只会给您带来问题。明确。请记住,并不是所有的Python 2s标准库都接受unicode。如果你喂一个unicode方法,它不起作用,但它应该尝试将它喂给ascii并看看。示例:urllib.urlopen(),如果您为其提供unicode对象而不是字符串,则会失败并显示无用的错误。
嗯。这就是我现在能想到的!
第3点是如此真实 - 我认识的每个人(包括我)都犯了这个错误,而不仅仅是一次! – 2009-07-12 19:05:52
- 1. 值“零”默认情况下,字符串
- 2. 默认情况下如何在cmd.exe中制作Unicode字符集?
- 3. 默认情况下,类中的方法应该是classmethod吗?
- 4. 在字符串的情况下应该如何使用同步?
- 5. 默认情况下,使qmake使用qt5
- 6. Switch语句。使用默认情况下
- 7. 默认情况下,JMS使用HTTP?
- 8. 产量和默认情况||不输出默认情况下
- 9. 在这种情况下,我应该使用Wordpress Transient API吗?
- 10. Java:我应该在这种情况下使用多线程吗?
- 11. 我应该在这种情况下使用新的吗?
- 12. 我应该在这种情况下使用Gzip吗?
- 13. 我应该在这种情况下使用Polymorphic关联吗?
- 14. 我应该在这种情况下使用嵌套类吗?
- 15. 我应该在这种情况下使用XML吗?
- 16. 在这种情况下,我应该使用指针向量吗?
- 17. 我应该在这种情况下使用合并吗?
- 18. 在这种情况下我应该使用继承吗?
- 19. 在这种情况下我们应该使用noexcept吗?
- 20. 我应该在这种情况下使用宏吗?或...
- 21. 在这种情况下,我应该使用reduceLeft方法吗?
- 22. 在这种情况下我应该使用例外吗?
- 23. 安卓:默认情况下
- 24. 默认情况下,法国
- 25. 默认情况下,Constexpr lambda?
- 26. 默认情况下在VBox
- 27. 在默认情况下
- 28. FactoryGirl在默认情况下
- 29. 默认情况下不应该MVC忽略图像?
- 30. 默认情况下应该执行什么操作?
+1:处理文本时总是使用unicode。每当需要将文本数据视为字节时(例如在网络上移动或写入磁盘时) - 将unicode转换为一系列字节(在Python中表示为一个字符串)。通过调用编码或unicode进行转换。 – codeape 2009-07-22 13:31:38