如何将python 2.6项目移动到UTF-8?

如何将python 2.6项目移动到UTF-8?,python,unicode,Python,Unicode,我们正在从latin1迁移到UTF-8,有10万行python代码 另外,我是python新手(哈哈哈!) 我已经知道,str()函数在接收Unicode时失败,因此我们应该使用Unicode()来代替它,效果几乎相同 代码的其他“危险”地方是什么 是否有转移到UTF-8的基本准则/算法?它能写一个自动的“代码转换器”吗?str和unicode是类,而不是函数。当您调用str(u'abcd')时,您正在初始化一个以'abcd'为变量的新字符串。碰巧可以使用str()将任何类型的字符串转换为asc

我们正在从latin1迁移到UTF-8,有10万行python代码

另外,我是python新手(哈哈哈!)

我已经知道,
str()
函数在接收Unicode时失败,因此我们应该使用
Unicode()
来代替它,效果几乎相同

代码的其他“危险”地方是什么


是否有转移到UTF-8的基本准则/算法?它能写一个自动的“代码转换器”吗?

str
unicode
是类,而不是函数。当您调用
str(u'abcd')
时,您正在初始化一个以'abcd'为变量的新字符串。碰巧可以使用
str()
将任何类型的字符串转换为ascii
str

其他需要注意的方面包括读取文件/输入时,或者基本上是从非unicode编写的函数中以字符串形式返回的任何内容


享受:)

将Python2.x快速转换为默认UTF-8编码的一种方法是。这种方法有它的缺点——主要是它改变了所有库以及应用程序的编码,所以请谨慎使用。我的公司在我们的生产应用程序中使用了这种技术,它非常适合我们。它还与Python3向前兼容,Python3将UTF-8作为默认编码。您仍然需要将
str()
的引用更改为
unicode()
,但不必使用
.decode()
encode()显式指定编码

它能写成自动“代码转换器”吗?=)

否。
str
unicode
是两种不同的类型,它们有不同的用途。无论是在Python2还是Python3中,都不应该尝试用Unicode字符串替换每次出现的字节字符串

继续对二进制数据使用字节字符串。特别是,您正在向文件或网络套接字写入的任何内容都是字节。并对面向用户的文本使用Unicode字符串


中间有一个灰色的内部ASCII字符串区域,可以是字节或Unicode。在Python2中,这些通常是字节,在Python3中通常是Unicode。在您乐于将代码限制为Python 2.6+的情况下,您可以将明确的字节字符串标记为
b'
bytes
,将明确的字符字符串标记为
u'
unicode
,并使用
'
str
表示“无论默认的字符串类型是什么”字符串。

你的意思是你正在从
str
转移到
unicode
?我的意思是项目一直在到处使用ASCII,现在项目应该得到意向化,应该到处使用unicode,而unicode字符串在Python中不使用UTF-8(这不会限制它们的用途),因此,请指定您是想要Unicode支持还是必须切换到UTF-8。对于Python中的基本Unicode支持,您应该更喜欢Python的Unicode字符串(使用UTF-16或UTF-32)。感谢utf-8/utf-16文件不一定是ascii,我想说的是,一旦您发现自己使用的字符不是前127个字符,最好使用unicode,那么您就不依赖于一个代码页。文件是显式字节。不能将字符直接写入文件。有多种方法可以半自动编码发送到文件中的Unicode字符(特别是在Python 3中),但毕竟显式比隐式好……我认为,如果您声明打开一个文本文件(使用
rt
wt
文件模式),那么显式就足够了。在Python2.6中,您必须使用
编解码器
模块,但这仍然比手动解码简单,而且非常明确。