有没有办法将文件中的 4 字节 UTF-8 编码字符存储为 Python 中的两个字符?

Is there a way to store 4-byte UTF-8 encoded characters from a file as two characters in Python?

我对 encoding/decoding 的理解不是最好的,所以如果有任何混淆,我们深表歉意:

我正在修改 Javascript 应用程序。它搜索索引文件以找到单词的索引,然后使用其索引访问字典文件中单词的条目。因此,如果该词的索引为 100,则该词的定义将出现在 dict[100] 中。这些文件在 Javascript 应用程序中使用 response.text() 加载到变量中。这似乎将 4 字节的 utf-8 编码字符呈现为两个单独的字符。例如:并且在 utf-8 中是四个字节,所以我认为它们显示为 ��(就像它们在 cmd 中一样)。当前索引说明了这一点,但由于我正在更新字典中的条目,因此我需要更新索引。 Python 中有没有办法将 4 字节的 utf-8 编码字符解码为两个字符?我目前的解决方案是读取 Python 中的 old_index 和 old_dict 文件,并在索引找不到条目时手动添加一个额外的字符。我怀疑我需要切换语言以获得更优雅的解决方案。


编辑:我觉得解释我的目标会让这件事变得混乱。问题的症结在于我试图找到一种方法来对 4 字节的 utf-8 编码字符进行两次计数。这可能可以通过一个字符一个字符地检查它在 utf-8 中的编码大小来完成。

 with open(r"data\dict.txt", "r", encoding="utf-8") as f:
     dict = f.read()
 for char in dict:
    byteArray = char.encode("utf-8")
    if len(byteArray) == 4:
       idx += 2
    else:
       idx += 1

代码点大于或等于 0x10000 的 Unicode 字符在 utf-8 中有 4 字节表示。

Wikipedia utf-8

所以:

with open(r"data\dict.txt", "r", encoding="utf-8") as f:
    s = f.read()
idx = 0
for char in s:
    idx += 2 if ord(char) >= 0x10000 else 1

我希望这段代码足够“优雅”以证明使用 Python :-)

我将变量名从“dict”更改为“s”,因为“dict”是内置类型的名称。