我有两个不同的数据表,其中一个中片假名平假名声音标记是前一个字符的一部分,在另一个中它是一个单独的符号。我需要匹配两个表之间的值。 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']
该字符不是组合字符,因此它合法地出现在前一个字符之后并与前一个字符分开。
https://www.fileformat.info/info/unicode/char/309b/index.htm明确将其分解列出为空格和组合重音。 (这只是实际 Unicode 数据库的许多流行的可浏览版本之一,因此我认为它具有相当的权威性。)
对于我来说,在 Mac 上的 Chrome 中,它呈现的效果就好像空格位于重音符号后面,但它显然与您的其他示例是不同的字符串: