我正在使用Python 3编程,我遇到一个小问题,我在网上找不到任何引用。
据我所知,默认字符串是utf-16,但我必须使用utf-8,我找不到将默认字符串转换为utf-8的命令。 我非常感谢你的帮助。
答案 0 :(得分:6)
在Python 3中,当您使用字符串操作时,有两种不同的数据类型很重要。首先是字符串类,一个表示unicode代码点的对象。重要的是,这个字符串不是一些字节,而是一个字符序列。其次,有一个bytes类,它只是一个字节序列,通常表示存储在编码中的字符串(如utf-8或iso-8859-15)。
这对你意味着什么?据我所知,你想读写utf-8文件。让我们制作一个用'ç'字符替换所有'ć'的程序
def main():
# Let's first open an output file. See how we give an encoding to let python know, that when we print something to the file, it should be encoded as utf-8
with open('output_file', 'w', encoding='utf-8') as out_file:
# read every line. We give open() the encoding so it will return a Unicode string.
for line in open('input_file', encoding='utf-8'):
#Replace the characters we want. When you define a string in python it also is automatically a unicode string. No worries about encoding there. Because we opened the file with the utf-8 encoding, the print statement will encode the whole string to utf-8.
print(line.replace('ć', 'ç'), out_file)
那么什么时候应该使用字节?不经常。我能想到的一个例子就是当你从套接字中读取内容时。如果你在bytes对象中有这个,你可以通过执行bytes.decode('encoding')使它成为unicode字符串,反之亦然,使用str.encode('encoding')。但正如所说,可能你不需要它。
仍然,因为它很有趣,这里很难,你自己编码所有东西:
def main():
# Open the file in binary mode. So we are going to write bytes to it instead of strings
with open('output_file', 'wb') as out_file:
# read every line. Again, we open it binary, so we get bytes
for line_bytes in open('input_file', 'rb'):
#Convert the bytes to a string
line_string = bytes.decode('utf-8')
#Replace the characters we want.
line_string = line_string.replace('ć', 'ç')
#Make a bytes to print
out_bytes = line_string.encode('utf-8')
#Print the bytes
print(out_bytes, out_file)
关于这个主题(字符串编码)的好读物是http://www.joelonsoftware.com/articles/Unicode.html。真的推荐阅读!
来源:http://docs.python.org/release/3.0.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
(PS如你所见,我在这篇文章中没有提到utf-16。我实际上不知道python是否使用它作为内部解码,但它完全无关紧要。目前你正在使用一个字符串,你使用字符(代码点),而不是字节。