Python - 如何为 UTF-8 编码的文本添加换行符?
Python - How to add line breaks to UTF-8 encoded text?
我没有包含我的代码,因为只有当我尝试使用某个 html 文件时才会出现问题。使用该文件给我错误:
UnicodeEncodeError: 'charmap' codec can't encode character '\u2192' in position 21348:
我创建的用于测试我的程序的简单 html 文件不会发生这种情况。我可以用 utf-8 对有问题的文件进行编码,这样我就可以将 html 用作 Python 中的字符串,但我没有运气将换行符重新放入字符串中。
当然编码后,换行符变成了一串'\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: expected a bytes-like object, not '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 变量,就在这里。
没有 MCVE,很难检测到您在做什么。但是 \n
代表换行符。它的显示方式取决于您如何解释字符串,例如
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"
/>
→
错误 TypeError: expected a bytes-like object, not 'str'
意味着您应该将变量转换为类似字节的变量。因此,最好的问题是:
“如何将 str 变量转换为类似字节的变量?”
您可以将 str 变量转换为类字节:
your_string_variable.encode()
但是您没有提供任何 Python 代码,所以我说的可能不是解决方案。所以检查 Google search results for your error. For example, you can find .
与其自己对数据进行编码,不如让 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 将尝试使用您系统的默认编码,它无法处理右箭头字符。
一般来说,如果您主要处理文本,最好在应用程序的边缘解码和编码并处理 str
数据(这称为“unicode 三明治”方法)。
我没有包含我的代码,因为只有当我尝试使用某个 html 文件时才会出现问题。使用该文件给我错误:
UnicodeEncodeError: 'charmap' codec can't encode character '\u2192' in position 21348:
我创建的用于测试我的程序的简单 html 文件不会发生这种情况。我可以用 utf-8 对有问题的文件进行编码,这样我就可以将 html 用作 Python 中的字符串,但我没有运气将换行符重新放入字符串中。
当然编码后,换行符变成了一串'\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: expected a bytes-like object, not '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 变量,就在这里。
没有 MCVE,很难检测到您在做什么。但是 \n
代表换行符。它的显示方式取决于您如何解释字符串,例如
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"
/>
→
错误 TypeError: expected a bytes-like object, not 'str'
意味着您应该将变量转换为类似字节的变量。因此,最好的问题是:
“如何将 str 变量转换为类似字节的变量?”
您可以将 str 变量转换为类字节:
your_string_variable.encode()
但是您没有提供任何 Python 代码,所以我说的可能不是解决方案。所以检查 Google search results for your error. For example, you can find
与其自己对数据进行编码,不如让 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 将尝试使用您系统的默认编码,它无法处理右箭头字符。
一般来说,如果您主要处理文本,最好在应用程序的边缘解码和编码并处理 str
数据(这称为“unicode 三明治”方法)。