Python 默认情况下我应该使用Unicode字符串吗?
在用Python编码时,选择Unicode字符串而不是常规字符串是否被认为是一种好的做法?我主要工作在Windows平台上,其中大部分的字符串类型是Unicode,这些天(即.NET字符串,'Unicode)在新C++项目上默认启动)。因此,我倾向于认为使用非Unicode字符串对象的情况是一种罕见的情况。无论如何,我很好奇Python实践者在现实项目中做什么 根据我的实践——使用unicode 在一个项目开始时,我们使用了usuall字符串,然而我们的项目在不断发展,我们正在实现新的特性并使用新的第三方库。在非unicode/unicode字符串的混乱中,一些函数开始失败。我们开始花时间解决这些问题。然而,一些第三方模块不支持unicode,在我们切换到unicode后开始出现故障(但这是一种排除而非规则) 我也有一些经验,当我们需要重写一些第三方模块(例如SendKeys)时,因为它们不支持unicode。如果从一开始就用unicode完成,会更好:) 所以我认为今天我们应该使用unicodePython 默认情况下我应该使用Unicode字符串吗?,python,unicode,Python,Unicode,在用Python编码时,选择Unicode字符串而不是常规字符串是否被认为是一种好的做法?我主要工作在Windows平台上,其中大部分的字符串类型是Unicode,这些天(即.NET字符串,'Unicode)在新C++项目上默认启动)。因此,我倾向于认为使用非Unicode字符串对象的情况是一种罕见的情况。无论如何,我很好奇Python实践者在现实项目中做什么 根据我的实践——使用unicode 在一个项目开始时,我们使用了usuall字符串,然而我们的项目在不断发展,我们正在实现新的特性并使用
另外,所有这些乱七八糟的东西只是我的观点:)如果你处理的是严重受限的内存或磁盘空间,请使用ASCII字符串。在这种情况下,您还应该用C或更简洁的语言编写软件:)当您问这个问题时,我想您使用的是Python2.x Python 3.0在字符串表示法方面有了很大的变化,现在所有的文本都是unicode。
在任何新项目中,我都会选择unicode——以一种与转换到Python 3.0兼容的方式(请参阅)。除了Mihail的评论之外,我会说:使用unicode,因为它是未来。在Python3.0中,非Unicode将不复存在,据我所知,所有的“U”前缀都将带来麻烦,因为它们也不复存在。在Python2.x中一致使用Unicode字符串可能会很棘手-可能是因为有人无意中使用了更自然的
str(blah)
,它们的意思是Unicode(blah)
,忘记字符串文本的u
前缀,第三方模块不兼容-不管怎样。因此,在Python2.x中,只有在必要时才使用unicode,并且准备提供良好的单元测试覆盖率
但是,如果您可以选择使用Python3.x,则无需担心-字符串将是unicode,无需额外努力。是的,使用unicode
一些提示:
嗯,这就是我现在能想到的 是的,未来的兼容性非常重要!第三点是如此真实——我认识的每个人(包括我)都犯了这个错误,而且不止一次!回复:“写后直接编码”——你能澄清一下吗?我认为应该是“before”而不是“after”,但我可能没有抓住你的重点。@Lennart:“请注意,根据Python的说法,即使你将unicode编码成一个充满非ascii文本的字符串,这仍然是文本。”。。。在3.x中,str.encode()返回类型字节,ascii与否的区别似乎无关紧要;你想表达的意思是什么?@ars:对,修正了@约翰:嗯,我想我只是把事情弄得更混乱了。这不是重点,所以我删除了它。@Lennart:默认情况下生成UTF-8输出会有什么问题?这比在不同平台上做不同事情的程序要好得多。如果人们不喜欢UTF-8,他们可以通过iconv来传输信息。当程序总是做同样的事情时,它会更可靠。我编写的每个程序,无论是Perl、Python还是Java,都会将stdin和stdout强制为UTF-8(但接受来自环境的覆盖)。我简直无法忍受默认平台编码让你发疯的方式。+1:在处理文本时始终使用unicode。每当需要将文本数据视为字节时(例如,在网络上移动或写入磁盘时)——将unicode转换为字节序列(在Python中表示为字符串)。通过调用encode或unicode进行转换。