【发布时间】:2021-04-08 22:00:54
【问题描述】:
我没有包含我的代码,因为只有在我尝试使用某个 html 文件时才会出现问题。该文件的使用给了我错误:
UnicodeEncodeError:“charmap”编解码器无法在位置 21348 编码字符“\u2192”:
我创建的用于测试程序的简单 html 文件不会发生这种情况。我可以在 utf-8 中对有问题的文件进行编码,这允许我在 Python 中将 html 用作字符串,但我没有运气将换行符重新放入字符串中。
当然,在编码之后,换行符变成了'\n'的字符串,而不是换行符。意思是我的代码块如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
变成这样:
<!DOCTYPE html>\n<html lang="en">\n <head>\n <meta charset="utf-8" />\n <meta\n name="viewport"\n content="width=device-width, initial-scale=1, shrink-to-fit=no"\n />\n
我认为有一种简单的方法可以恢复换行符,但我没有找到任何示例。 replace() 函数没有帮助我到达任何地方,它给了我错误:
TypeError: 需要一个类似字节的对象,而不是 'str'
老实说,我实际上并不知道如何向函数传递“类似字节”的对象。我尝试过的每个类似字节的对象都给了我另一个错误。
所以主要问题是,如何让换行符重新回到我的 UTF-8 字符串中?
但是奖励积分如果有人能告诉我为什么我会收到 UnicodeEncodeError。位置 21348 中的字符只是一个“l”,但它位于此代码块中,如果这有帮助的话。然而,字符 u/2192 是一个 → 向右箭头。提前致谢。
<!--
<div class="service-icon text-center">
<img src="../assets/img/service/2.png" alt="" />
</div>
-->
编辑
相关python代码:
import data
enc_data = data.encode('utf-8')
#use of enc_data
for item in new_items:
item.strip()
pathlib.Path(file_dir, f"{item}.html").write_text(f"{enc_data}\n")
这就是我所能看到的与 Unicode 错误相关的全部内容。我只使用一次 enc_data 变量,就在这里。
【问题讨论】:
-
你定义了编码类型吗?像“f = open('index.html', 'w', encoding='utf-8').write(your html string)”?
-
@Epsi95 我正在使用来自另一个模块的文本作为字符串。我导入了该变量,然后对其进行了编码。例如:从 pyindex 导入数据 | enc_data = data.encode('utf-8') |然后是 .write_text(f"{enc_data}\n")。应该这样做不应该吗?
-
向我们展示您如何打开您正在调用
.write()的文件。您的错误消息涉及charmap 编码,可能是latin-1 或windows-1252,具体取决于您的平台。如果您将 UTF-8 写入需要 latin-1 或 windows-1252 的文件,您将得到该错误。 -
不要使用 .write_text(f"{enc_data}\n")。当您对字符串进行编码时,这意味着您正在使用给定格式制作该字符串的字节。由于您使用的是 f 字符串,因此应解码为 .write_text(f"{enc_data.decode()}\n")
-
@Epsi95 我已经尝试过了,但不幸的是它让我回到了 UnicodeEncodeError。
标签: python html unicode utf-8 character-encoding