Emoji U+1F60A 读取时包含 utf-16 换行符?

问题描述 投票:0回答:1

我们面临的问题是,我们有一个文件,当使用普通文件阅读器(例如 Notepad++)打开时,表情符号会成功渲染,并且不会添加额外的新行。然而,当用Python打开它时,utf-16字节被分成两行,搞乱了我们并行读取文件的大数据处理框架。

我们需要了解是什么让 Notepad++ 清楚地知道序列中没有真正的新行

=\xd8\n\xde
,以便我们可以调整自定义文件阅读器。

enter image description here

重现步骤

  • 将此表情符号😊复制到空文件并添加新行。

  • 保存文件并使用Python以字节格式打开它:

# Open the file as bytes:
with open("file_name.csv", "rb") as f:
   for line in f:
       print(line)
  • 你发现表情符号中间多了一个换行符:
b'\xff\xfe=\xd8\n'
b'\xde\r\x00\n'
b'\x00'
python-3.x python-unicode
1个回答
0
投票

U+1F60A 的 UTF-8 字节实际上是(十六进制)

f0 9f 98 8a
。请注意,这不包含字节
0A
又名
\n
,而是
8A

UTF-16(大端)两字节字符是:d83d de0a。

UTF-16LE(低端)两字节字符是:3dd8 0ade。

这是错误:编码错误,您正在使用字节编码或类似的编码。

© www.soinside.com 2019 - 2024. All rights reserved.