加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

处理统一码文件是场噩梦?这些诀窍助你大梦初醒

发布时间:2019-08-27 14:43:00 所属栏目:建站 来源:读芯术
导读:对付那些常常在一般事变中处理赏罚同一码文件(也合用于其他编码)的人来说,这篇文章是必读的。对付天然说话处理赏罚的从颐魅者,处理赏罚同一码文件是一场恶梦,尤其是行使Windows操纵体系。想象一下,当在编码或解码进程中碰着错误时的沮丧,譬喻: UnicodeEncodeError:
副问题[/!--empirenews.page--]

处理赏罚同一码文件是场恶梦?这些诀窍助你大梦初醒

对付那些常常在一般事变中处理赏罚同一码文件(也合用于其他编码)的人来说,这篇文章是必读的。对付天然说话处理赏罚的从颐魅者,处理赏罚同一码文件是一场恶梦,尤其是行使Windows操纵体系。想象一下,当在编码或解码进程中碰着错误时的沮丧,譬喻:

  1. UnicodeEncodeError: 'mbcs' codec can't decode characters in  
  2.  
  3. positionUnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 

大大都时辰,除非是这个规模履历富厚的人,不然这样的错误并不能提供足够的信息。你也许会问为什么必要对字符举办编码息争码。我们可以从对同一码的简朴表明来答复这个题目。

基于官方python文档,同一码Unicode (通用编码字符集)是一种类型,旨在列出人类说话行使的每个字符,并为每个字符提供各自奇异的代码。同一码类型不绝被修订和更新,以添加新的说话和标记。

因此,编码息争码是一种将字符从文本映射到字节的要领,反之亦然。这使得它们可在计较机之间传输,并在一般糊口中行使。当拥有差异的操纵体系集时,环境会更伟大。

另外,差异说话有各自的字符集,只能在特定字体下表现。简朴而言,可以看作是将一个外笔墨符翻译成呆板能领略的字符。本文将切磋一些可以用于处理赏罚Python中同一码文件的要领,从可用模式和尺度编码来入手。

处理赏罚同一码文件是场恶梦?这些诀窍助你大梦初醒

同一码同盟的官方符号

通过上下文打点器读写文件

打开文件最安详的要领是通过上下文打点器行使with语句。它将自动封锁文件,防备任何也许呈现的题目。

  1. with open('name.txt') as f: 
  2.     f.readlines() 

默认模式是'rt' ,即读取和发送文件。可以行使以下代码编写:

  1. with open('name.txt', 'w') as f: 
  2.     f.write('Hello world!') 

上面的代码将改写并截断文件。在一些环境下,也许更喜好行使模式 'a'而不是'w'。以下列表表现了可用的完备模式:

  • r:打开阅读(默认)
  • w:打开写入,起首截断文件
  • x:打开专属建设,假如文件已经存在则失败
  • a:打开写入,假如文件存在,则添加到文件末端
  • b:二进制模式
  • t:文本模式(默认)
  • +:打开一个磁盘文件举办更新(读写)

可以组合一些模式。如原始文档中所述(https://docs.python.org/3.5/library/functions.html#open),对付二进制读写会见,模式'w+b' 打开并将文件截断为0字节。'r+b' 打开文件不会截断。

Python中的尺度编码

在Python中指定编码,只需在上下文打点器初始化时代传入另一个参数。无论何时读写同一码字符,都必要指定它。以下例子表现了将同一码文本添加到现有文件的正确要领:

  1. with open('name.txt', 'a', encoding='utf8') as f: 
  2. f.write('你好!') 

假如不确定行使哪种编码,只需输入 utf8并搜查是否有误。大多环境下,UTF-8对付编码息争码字符已经够好了。然而在某些环境下,必要行使差异的编码。

更多关于可用编码的信息:

https://docs.python.org/3.7/library/codecs.html#standard-encodings

假如不知道文件中行使的什么编码该怎么办?一路进入下一部门来相识更多。

通过Notepad++搜查编码范例

一样平常会更倾向行使Notepad++来查察文件内容。假如行使Notepad++打开一个文件,可以在用户界面的右下角看到行使的编码范例。

一个行使UTF-8编码的示例文件

一个行使UTF-8编码的示例文件

可以通过编码菜单修改编码,它接管大量最常用的编码。

单击编码菜单时表现下拉菜单的图像

单击编码菜单时表现下拉菜单的图像

假如曾碰着过无法将文件转换为另一种编码的题目,可能纵然正确地指定了某些编码,也无法读取,那么可以实行以下要领。固然有点笨,但亲测有用。

  • 用小我私人但愿的编码建设一个空的文本文件。
  • 从原始文件中复制全部内容。
  • 将其粘贴到新文件并生涯。

大大都环境下,这将自动将全部字符转换为新的编码。请留意,假如不能按照新的编码转换字符,也许会造成数据丢失。

处理赏罚未知编码中的字符

假如碰着无法辨认编码且字符未知的环境,可以实行修改错误参数来办理这个题目:

  1. with open('name.txt', 'r', encoding='utf8', errors='ignore') as f: 
  2.     f.readlines() 

错误参数指的是如那里理赏罚编码息争码错误。请留意,此参数不能在二进制模式中行使。可用错误的处理赏罚措施有:

  • 严酷:假如存在编码错误,则会造成ValueError 非常。None的默认值有沟通结果。
  • 忽略:忽略错误。留意,忽略编码错误会导致数据丢失。
  • 替代:将替代标志(如'?')插入有畸形数据的位置。
  • surrogateescape:将同一码私有行使地区中的任何不正确字节暗示为代码点,范畴从U+DC80到U+DCFF。当这个错误处理赏罚措施用于编写数据时,这些私有代码点将被转为沟通字节。这对付处理赏罚未知编码的文件很有效。
  • xmlcharrefreplace:仅在写入文件时受支持。不受编码支持的字符将被替代为恰当的可扩展标志说话的字符引用 &#nnn;。
  • backslashreplace:用Python的backslash转义字符替代畸形数据。
  • namereplace:(仅在编写时支持)替代不支持的 N{...} 转义字符。

在呼吁提醒符中表现同一码字符

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读