在python< = 2.7中编写unicode程序的一般指导原则是什么?使用u前缀每个字符串是不错的做法,即使它不包含ASCII范围之外的任何字符?
在处理sqlite3时,参数化查询会自动将unicode编码为utf-8,还是需要手动完成?
当处理字符串'字符串'时,它应该保留为字符串对象还是解码为unicode字符串? (我相信这会在大多数情况下抛出异常)
如果出于任何原因我需要在代码中使用文字unicode字符,我可以只在字符串中使用该字符,只要它是一个unicode字符串并且我在文件顶部声明了我的编码吗? / p>
编辑:打印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会自动编码为存储在sys.stdout.encoding中的编码 Why Does Python print unicode characters when the default encoding is ASCII?
现在我想知道,有没有办法让print的默认行为替换不可编码的字符?或者我需要在我自己的函数中包装print,例如:
def myPrint(msg):
print msg.encode(sys.stdout.encoding, 'replace')
我知道Python 3中已经解决了大部分这些问题,但我想支持python< = 2.7。
答案 0 :(得分:1)
使用u前缀每个字符串是不错的做法,即使它不包含ASCII范围之外的任何字符?
是的,并且还使用与unicode一起使用的编辑器,并在每个文件的顶部声明编码类型。
通常,您的模式应该是:读取字节,在内部使用unicode,输出字节。
在处理sqlite3时,参数化查询会自动将unicode编码为utf-8,还是需要手动完成?
最好是安全而不是抱歉,但总的来说,我建议你自己测试一下。
当处理字符串'字符串'时,它应该保留为字符串对象还是解码为unicode字符串? (我相信这会在大多数情况下抛出异常)
是的,使用unicode在内部工作。不,如果你真的知道编码,这不会抛出异常。你应该知道编码。确保您知道编码。
如果出于任何原因我需要在代码中使用文字unicode字符,我可以只在字符串中使用该字符,只要它是一个unicode字符串并且我在文件顶部声明了我的编码吗? / p>
是的,只要您的编辑器是unicode友好的。