我没有包含我的代码,因为这个问题只有在我尝试使用某个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"
老实说,我真的不知道如何给函数传递一个'bytes-like'对象。我尝试过的每一个类似字节的对象都给了我另一个错误。
所以主要的问题是,如何将换行符放回我的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变量,这就是这里。
附加编辑
我在enc_data字符串中替换'n'的尝试如下所示:
lb = '\n'
enc_lb = lb.encode()
enc_data = data.encode('utf-8')
post_data = enc_data.replace(enc_lb, lb)
我觉得我已经用replace()方法尝试了所有可以尝试的方法。
与其自己编码数据,不如让pathlib来完成:
import data
#use of enc_data
for item in new_items:
item.strip()
pathlib.Path(file_dir, f"{item}.html").write_text(f"{data}\n", encoding='utf-8')
否则,pathlib将尝试使用系统的默认编码,该编码无法处理右箭头字符。
通常,如果您主要处理文本,最好在应用程序的边缘进行解码和编码,并处理
没有MCVE,很难检测到你在做什么。但
a = '''<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
\u2192'''
#on python console
a
#gives:
'<!DOCTYPE html>\n<html lang="en">\n\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 />→'
#and
print(a)
#gives:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
→
错误
您可以使用以下命令将字符串变量转换为类字节:
your_string_variable.encode()
但是你没有提供任何Python代码,所以我说的可能不是解决方案。所以请检查谷歌搜索结果中的错误。例如,你可以找到这个答案。