【问题标题】:Python script to convert from UTF-8 to ASCII [duplicate]用于从 UTF-8 转换为 ASCII 的 Python 脚本 [重复]
【发布时间】:2011-05-17 00:39:10
【问题描述】:

我正在尝试在 python 中编写一个脚本来将 utf-8 文件转换为 ASCII 文件:

#!/usr/bin/env python
# *-* coding: iso-8859-1 *-*

import sys
import os

filePath = "test.lrc"
fichier = open(filePath, "rb")
contentOfFile = fichier.read()
fichier.close()

fichierTemp = open("tempASCII", "w")
fichierTemp.write(contentOfFile.encode("ASCII", 'ignore'))
fichierTemp.close()

运行此脚本时出现以下错误:

UnicodeDecodeError: 'ascii' 编解码器 无法解码位置 13 中的字节 0xef: 序数不在范围内(128)

我认为可以通过 encode 方法中的 ignore 参数忽略错误。但好像没有。

我对其他转换方式持开放态度。

【问题讨论】:

  • 问题是你从一开始就没有解码。
  • 您收到错误是因为该字符不存在于 ASCII 字符集中,因此无法转换。有时您可以将 UTF8 字符映射到 ASCII 中最接近的视觉匹配字符,例如 ée,但这会改变单词的含义。您必须决定该路径是否适用于您的应用程序。
  • 这似乎是个非常糟糕的主意!

标签: python utf-8 character-encoding ascii


【解决方案1】:
data="UTF-8 DATA"
udata=data.decode("utf-8")
asciidata=udata.encode("ascii","ignore")

【讨论】:

  • 听上去是数据丢失的坏方法。
  • 如果您希望从 8 位编码转换为 7 位,您应该会丢失数据。
  • 我忽略了我必须先解码。现在可以使用了,谢谢。为了回答这些问题,我想这样做是因为我的 MP3 播放器只能显示以 ASCII 编码的歌词文件。
  • 你可以看看这个解决方案:stackoverflow.com/a/517974/1463812
【解决方案2】:
import codecs

 ...

fichier = codecs.open(filePath, "r", encoding="utf-8")

 ...

fichierTemp = codecs.open("tempASCII", "w", encoding="ascii", errors="ignore")
fichierTemp.write(contentOfFile)

 ...

【讨论】:

  • 感谢您的解决方案,它也有效!!!
【解决方案3】:

UTF-8 是 ASCII 的超集。要么你的 UTF-8 文件是 ASCII 码,要么不能无损失地转换。

【讨论】:

  • 我想他知道这一点,否则他不会尝试使用'ignore'
  • @Ignacio 是的。但这让我想知道提问者想要达到什么目的。他们可能是货物崇拜,或者他们的需求可能最好通过像 urlencode 这样的东西来满足,或者有损是可以接受的。
  • 我害怕货物崇拜。剔除所有你不欣赏的角色真的很不敏感。
  • @Ignacio:想象一下被称为 Vzquez-Abrams。 :(
  • @tchrist:这就是我从不使用它的原因。
猜你喜欢
  • 2011-01-16
  • 2019-06-04
  • 2019-10-31
  • 2017-06-05
  • 2013-04-19
  • 2011-06-19
  • 2021-07-11
  • 2012-08-04
  • 2010-09-20
相关资源
最近更新 更多