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

我对编码/解码的理解不是最好的,如果有任何令人困惑的地方,我深表歉意:

我正在修改一个 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
a527672905 回答:有没有办法将文件中的 4 字节 UTF-8 编码字符存储为 Python 中的两个字符?

代码点大于或等于 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”是内置类型的名称。

本文链接:https://www.f2er.com/4129.html

大家都在问