用python<;=2.7编写unicode程序的一般指导原则是什么?在每个字符串前面加上u,即使它不包含ASCII范围之外的任何字符,这是一个好的做法吗?在
在处理sqlite3时,参数化查询会自动将unicode编码为utf-8,还是需要手动进行编码?在
在处理字节的“字符串”时,应该将其保留为字符串对象还是解码为unicode字符串?(我相信这在大多数情况下都会引发例外)
如果出于任何原因,我需要在代码中使用文本unicode字符,那么只要它是unicode字符串,并且在文件的顶部声明了编码,我可以在字符串中使用该字符吗?在
编辑:当打印unicode字符串时,如何获得用户系统的区域设置,以便能够正确编码?盲目地将所有内容编码为utf-8似乎是个坏主意,因为并非所有系统都支持它。
编辑:我想我找到了这个。可以使用locale来完成import locale
encoding = locale.getpreferredencoding()
编辑:这种编码实际上是隐式的吗?现在我很困惑。在linux上,我可以这样做
^{pr2}$
但在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的默认行为替换不可编码的字符?还是需要在自己的函数中包装打印内容,例如:def myPrint(msg):
print msg.encode(sys.stdout.encoding, 'replace')
我知道这些问题中的大多数已经在python3中解决了,但是我希望支持Python<;=2.7。在