在Python <= 2.7中编写Unicode程序的一些基本指南是什么?即使字符串不包含ASCII范围以外的字符,每个字符串都加上'u'前缀是否是一种好的实践方式?
处理sqlite3时,参数化查询是否会自动将Unicode编码为UTF-8,还是需要手动完成?
在处理字节"字符串"时,应该将其保留为字符串对象还是解码为Unicode字符串?(我认为这在大多数情况下会引发异常)
如果由于任何原因我需要在代码中使用文字Unicode字符,只要它是Unicode字符串并且我在文件顶部声明了我的编码,我就可以在字符串中使用该字符吗?
编辑:打印Unicode字符串时,如何获取用户系统的区域设置以便正确地进行编码?盲目地将所有内容编码为utf-8似乎不是一个好主意,因为并非所有系统都支持它。 编辑:我相信我已经理解了这个问题。可以使用locale来完成。
但在 Windows 上会出现这种情况。
处理sqlite3时,参数化查询是否会自动将Unicode编码为UTF-8,还是需要手动完成?
在处理字节"字符串"时,应该将其保留为字符串对象还是解码为Unicode字符串?(我认为这在大多数情况下会引发异常)
如果由于任何原因我需要在代码中使用文字Unicode字符,只要它是Unicode字符串并且我在文件顶部声明了我的编码,我就可以在字符串中使用该字符吗?
编辑:打印Unicode字符串时,如何获取用户系统的区域设置以便正确地进行编码?盲目地将所有内容编码为utf-8似乎不是一个好主意,因为并非所有系统都支持它。 编辑:我相信我已经理解了这个问题。可以使用locale来完成。
import locale
encoding = locale.getpreferredencoding()
编辑:这种编码是否实际上是隐式完成的?现在我很困惑。在Linux上,我可以这样做:
s = u'\u2c60'
print s # prints Ⱡ
print s.encode('utf-8') # prints Ⱡ
但在 Windows 上会出现这种情况。
s = u'\u2c60'
print s # prints Ⱡ in IDLE, UnicodeEncodeError in cmd
print s.encode('cp1252') # UnicodeEncodeError
print s.encode('utf-8') # prints â±
print s.encode('cp1252', 'replace') # prints ?
似乎print会隐式地进行转换...
编辑:这个问题说,print将自动编码为存储在sys.stdout.encoding中的编码。 为什么Python在默认编码为ASCII时打印Unicode字符?
现在我想知道,是否有一种方法可以使print的默认行为替换无法编码的字符?还是我需要在自己的函数中包装print,类似于:
def myPrint(msg):
print msg.encode(sys.stdout.encoding, 'replace')
我知道大多数这些问题已经在Python 3中得到解决,但我希望支持Python <= 2.7。
io.open()
(或from future_builtins import open
)来使用与 Python 3 相同的文件 I/O。在输入时解码和输出时编码,就像在 Python 3 中一样,在其他地方将文本视为 Unicode。 - Martijn Pieters