提问者:小点点

Python--如何为UTF-8编码文本添加换行符?


我没有包含我的代码,因为这个问题只有在我尝试使用某个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()方法尝试了所有可以尝试的方法。


共3个答案

匿名用户

与其自己编码数据,不如让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将尝试使用系统的默认编码,该编码无法处理右箭头字符。

通常,如果您主要处理文本,最好在应用程序的边缘进行解码和编码,并处理数据(这被称为“Unicode三明治”方法)。

匿名用户

没有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代码,所以我说的可能不是解决方案。所以请检查谷歌搜索结果中的错误。例如,你可以找到这个答案。