如何在日语文本的 Unicode 组合/分解过程中忽略声音标记中的空格?

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

我有两个不同的数据表,其中一个中片假名平假名声音标记是前一个字符的一部分,在另一个中它是一个单独的符号。我需要匹配两个表之间的值。 Unicode 等效项应该可以处理这些情况,但突然

U+309B
(片假名-平假名浊音标记)被分解为
U+0020
(空格)和
U+3099
(组合片假名-平假名浊音标记)。空格不允许我将 U+3099 与前一个字符组合。

示例:

从一张表中我得到价值ジ (

U+30B8
)。我执行 NFKC 转换:
U+30B8
分解为
U+30B7
U+3099
,然后组合回
U+30B8

从另一张表中我得到值 shi゛(

U+30B7
U+309B
)。我执行 NFKC 转换: (
U+30B7
U+309B
) 被分解为 (
U+30B7
U+0020
U+3099
) 并且 (
U+30B7
U+3099
) 不会组合回
U+30B8
,因为空间之间。所以我只剩下 shi ゙ (
U+30B7
U+0020
U+3099
) 并且我无法将该值与上表中的 ジ (
U+30B8
) 匹配。

我怎样才能摆脱

U+309B
分解中的空间,为什么它还在那里?

这是Python代码:

import unicodedata2


print(f"Unicode code points: {[hex(ord(c)) for c in unicodedata2.normalize('NFKC', 'シ゛')]}")
# Result: Unicode code points: ['0x30b7', '0x20', '0x3099']
print(f"Unicode code points: {[hex(ord(c)) for c in unicodedata2.normalize('NFKC', 'ジ')]}")
# Result: Unicode code points: ['0x30b8']
unicode python-unicode unicode-normalization
1个回答
0
投票

该字符不是组合字符,因此它合法地出现在前一个字符之后并与前一个字符分开。

https://www.fileformat.info/info/unicode/char/309b/index.htm明确将其分解列出为空格和组合重音。 (这只是实际 Unicode 数据库的许多流行的可浏览版本之一,因此我认为它具有相当的权威性。)

对于我来说,在 Mac 上的 Chrome 中,它呈现的效果就好像空格位于重音符号后面,但它显然与您的其他示例是不同的字符串:

screen shot of detail of OP's code

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