首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Python 8转换为cp1252

将Python 8转换为cp1252
EN

Stack Overflow用户
提问于 2022-04-01 14:45:27
回答 1查看 949关注 0票数 0

我已经有了在深层文件结构中迭代所有文件的代码,其中所有文件都是utf-8,需要转换为c1252 a.k.a。安西。

我需要达到和在任何严肃的文本编辑器中隐藏文件一样简单的结果.为什么会有损失呢?是的,有些字符被不同的字符标准地替换:Šš=ŠšČč=ÈèŤť=?Žž=ŽžĚě=ÌìŘř=ØøĎď=ÏïŇň=ÒòŮů=Ùù。

但是因为一个简单的字符串转换,比如

代码语言:javascript
复制
>>> print("Šš Čč Ťť Žž Ěě Řř Ďď Ňň Ůů".encode("utf-8").decode("cp1252"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Python310\lib\encodings\cp1252.py", line 15, in decode
    return codecs.charmap_decode(input,errors,decoding_table)
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 8: character maps to <undefined>

..。不起作用我的机会有多大?整整一天,我都读了几十篇文章,没有找到一个可行的解决方案,也无法理解这个cp转换的根本原因。找到甚至完整的函数和转换器,显然是为Python 2编写的,没有工作。

也不起作用:

chcp 65001

Active code page: 65001

代码语言:javascript
复制
           with open(fpath, mode="r", encoding="utf-8") as fd:
               content = fd.read()
           with open(fpath, mode="w", encoding="cp1252") as fd:
               fd.write(content)

代码语言:javascript
复制
          with open(fpath, mode="r", encoding="utf-8") as fd:
               decoded = fd.decode("utf-8")
               content = decoded.encode("cp1252")
EN

回答 1

Stack Overflow用户

发布于 2022-04-01 15:56:22

你的第一个例子是行不通的。使用一种方案对Unicode字符串进行编码和对另一种方案进行解码是不正确的,但您可以使用它生成的编码对文件或字节字符串进行解码,然后用另一种编码重新对其进行编码。然而,编码需要支持相同的Unicode代码点。

UTF-8支持编码所有Unicode代码点,而CP1252支持<256个,因此,如果您使用此路由,不要期望您的文件包含相同的信息。

在解码(读取)文件和编码(写入)文件时,可以使用errors参数。下面是一个示例字符串丢失的示例:

代码语言:javascript
复制
>>> s = "Šš Čč Ťť Žž Ěě Řř Ďď Ňň Ůů"
>>> s.encode('cp1252',errors='ignore').decode('cp1252')
'Šš   Žž     '
>>> s.encode('cp1252',errors='replace').decode('cp1252')
'Šš ?? ?? Žž ?? ?? ?? ?? ??'

也有无损转换,但使用替代方案。请参阅Python文档中的错误处理程序

因此,第二个示例可以通过提供errors参数来处理损失:

代码语言:javascript
复制
with open(fpath, mode="r", encoding="utf-8") as fd:
    content = fd.read()
with open(fpath, mode="w", encoding="cp1252", errors='replace') as fd:
    fd.write(content)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71708761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档