西里尔字符串匹配异常:SQLite与Excel无法识别为相同字符串
为什么SQLite和Excel无法识别看似相同的西里尔字符串?
你看到的两个字符串aфpиканeц和африканец,视觉上几乎一致,但底层的Unicode编码完全不同,这就是SQLite和Excel无法将它们识别为相同字符串的核心原因:
- 第一个字符串里的
a、p、e是拉丁字母,对应的Unicode编码分别是U+0061、U+0070、U+0065; - 第二个字符串里的
а、р、е是西里尔字母,对应的Unicode编码分别是U+0430、U+0440、U+0435。
SQLite和Excel的字符串匹配默认都是精确字符匹配,会严格对比每个字符的Unicode编码值,而非视觉外观。哪怕两个字符看起来一模一样,只要编码不同,就会被判定为不同的字符串。UTF-8只是编码格式,它负责把Unicode编码转换成字节流存储,但不会改变字符本身的Unicode编码值,所以检测编码为UTF-8并不能解决这个问题。
内容的提问来源于stack exchange,提问作者Karlomanio
相关产品推荐
相关产品推荐

