当前位置: 首页 > 面试题库 >

Python-Unicode(UTF-8)用Python读写文件

郎曜文
2023-03-14
问题内容

我在理解将文本写入文件和将文件写入文件时遇到了大脑故障(Python 2.4)。

# The string, which has an a-acute in it.
ss = u'Capit\xe1n'
ss8 = ss.encode('utf8')
repr(ss), repr(ss8)
(“ u'Capit \ xe1n'”,“'Capit \ xc3 \ xa1n'”)

print ss, ss8
print >> open('f1','w'), ss8

>>> file('f1').read()
'Capit\xc3\xa1n\n'

因此,我Capit\xc3\xa1n在文件f2 中输入我最喜欢的编辑器。

然后:

>>> open('f1').read()
'Capit\xc3\xa1n\n'
>>> open('f2').read()
'Capit\\xc3\\xa1n\n'
>>> open('f1').read().decode('utf8')
u'Capit\xe1n\n'
>>> open('f2').read().decode('utf8')
u'Capit\\xc3\\xa1n\n'

我在这里不明白什么?显然,我缺少一些至关重要的魔术(或理性)。一种类型的文本文件可以正确转换?

在这里,我真正无法理解的是UTF-8表示法的意义所在,如果你实际上无法让Python识别它的话(如果它来自外部)。也许我应该只将JSON转储字符串,然后使用它,因为它具有可表示性!更重要的是,当来自文件时,Python是否会识别并解码该Unicode对象的ASCII表示形式?如果是这样,我怎么得到它?

>>> print simplejson.dumps(ss)
'"Capit\u00e1n"'
>>> print >> file('f3','w'), simplejson.dumps(ss)
>>> simplejson.load(open('f3'))
u'Capit\xe1n'

问题答案:

在符号中

u'Capit\xe1n\n'

“ \ xe1”仅代表一个字节。“ \ x”告诉你“ e1”为十六进制。当你写

Capit\xc3\xa1n

到你的文件中,你有“ \ xc3”。这些是4个字节,在你的代码中,你全部读取了它们。显示它们时可以看到以下内容:

>>> open('f2').read()
'Capit\\xc3\\xa1n\n'

你可以看到反斜杠被反斜杠转义了。因此,你的字符串中有四个字节:“ \”,“ x”,“ c”“ 3”

编辑:

正如其他人在他们的答案中指出的那样,你只需要在编辑器中输入字符,然后你的编辑器就应处理到UTF-8的转换并保存。

如果你实际上有这种格式的字符串,则可以使用string_escape编解码器将其解码为普通字符串:

In [15]: print 'Capit\\xc3\\xa1n\n'.decode('string_escape')
Capitán

结果是一个以UTF-8编码的字符串,其中重音字符由\\xc3\\xa1原始字符串中写入的两个字节表示。如果要使用unicode字符串,则必须使用UTF-8再次解码。

编辑:文件中没有UTF-8。实际查看其外观:

s = u'Capit\xe1n\n'
sutf8 = s.encode('UTF-8')
open('utf-8.out', 'w').write(sutf8)

将文件utf-8.out内容与使用编辑器保存的文件内容进行比较。



 类似资料:
  • 问题内容: 我真的很困惑。当我做: 它给我错误 UnicodeDecodeError:’ascii’编解码器无法解码位置0的字节0xef:序数不在范围内(128) 如果我做: 它工作正常。 问题 是为什么第一种方法会失败?以及如何插入宝? 如果第二种方法是正确的方法,那么使用的重点是什么? 问题答案: 我相信问题在于这是字节字符串,而不是Unicode字符串。我怀疑文件处理程序试图根据“我是将Un

  • 问题内容: 当我解析XML时: 字符解析事件处理程序包括。 怎么能变成? 这是本文中的主要问题,其余仅显示对此的进一步(令人发指)的想法 Python unicode不会被破坏,因为它会产生收益吗?u’\ xfc’已经是一个unicode字符串,因此再次将其转换为unicode不起作用!将其转换为ASCII也不起作用。 我发现唯一可行的方法是:(这不是故意的,对吧?) 用utf-8替换8859失败

  • 我正在使用twitter python库从公共流中获取一些推文。该库以json格式获取推文并将其转换为python结构。我正在尝试做的是直接获取json字符串并将其写入文件。在twitter库中,它首先读取网络套接字并将应用到缓冲区。然后,它将信息包装在python结构中并返回。我可以使用将其编码回json字符串并将其保存到文件中。但是我想字符编码有问题。当我尝试打印json字符串时,它在控制台中

  • 问题内容: 我在从文件读取,处理其字符串并将其保存到UTF-8文件时遇到问题。 这是代码: 然后,我对可变文本进行一些处理。 接着 这样可以完美地输出文件,但是根据我的编辑器,它在iso 8859-15中可以输出。由于相同的编辑器将输入文件(在变量文件名中)识别为UTF-8,所以我不知道为什么会这样。据我的研究表明,注释行应该可以解决问题。但是,当我使用这些行时,产生的文件主要具有特殊字符的乱码,

  • 问题内容: 我有一个包含unicode字符串的词典列表。 可以将字典列表写入CSV文件。 我希望CSV文件以UTF8编码。 该模块无法处理将unicode字符串转换为UTF8的操作。 该模块文档具有的一切转换为UTF-8的例子: 它也有一个类。 但是…我该如何处理这些?他们是否不必将自己插入其中,以捕获反汇编的字典并对其进行编码,然后再将其写入文件中?我不明白 问题答案: 更新 :第三方unico

  • 2. Unicode和UTF-8 为了统一全世界各国语言文字和专业领域符号(例如数学符号、乐谱符号)的编码,ISO制定了ISO 10646标准,也称为UCS(Universal Character Set)。UCS编码的长度是31位,可以表示231个字符。如果两个字符编码的高位相同,只有低16位不同,则它们属于一个平面(Plane),所以一个平面由216个字符组成。目前常用的大部分字符都位于第一个