【发布时间】:2021-02-01 00:32:58
【问题描述】:
我正在调查对我们的语言支持造成的一些混乱(它用于我们的 IDN 功能,如果这敲响了警钟的话)...
我使用 SQL GUI 客户端快速查看我们的语言定义的结构。因此,当我执行select charcodes from ourCharCodesTable where language = 'myLanguage'; 时,我会得到'myLanguage' 的某些值的结果,例如:
myLanguage = "ASCII":result = "-0123456789abcdefghijklmnopqrstuvwxyz"
myLanguage = "Russian":result = "-0123456789абвгдежзийклмнопрстуфхцчшщъьюяѐѝ"
(顺便说一句:如果你像我一样是多语种的话,这里已经可以看到语言错误了!)
我想:“好吧,我可以用这个!让我们编写一个 Java 程序并输入一些逻辑来查找错误......”
我需要我的逻辑一次从“结果”中接收一个字符,并根据当前表上下文应用我的逻辑来标记它是否应该存在...
但是!当我在:myLanguage = "Belarusian":
有人会认为这种语言与俄语非常相似,但来自数据库的结果格式完全不同:result = "U+002D\nU+0030\nU+0030..."!
而且,还有另一种格式!
myLanguage = "Chinese" :result = "#\nU+002D;U+002D;U+003D,U+004D,U+002D\nU+0030;U+0030;U+0030"
FWIW:charcodes 列是 CLOB 类型。
我知道U+002D 是'-' 而U+0030 是'0'...
我目前的想法是:
1] 检查整个响应是 'щ' 格式还是 'U+0449` 格式('U+****' 是否用 ';'、',' 或 '\n' 分隔 - 我只是将它们视为独立字符)
一种。如果它是“简单的”,只需将字符发送到我的测试方法
湾。如果是“hard one”,则获取十六进制部分(0449),转换为十进制(1097)并转换为char(щ)
所以,我的问题是:
- 这是什么“U+043E;U+006F,U+004D”格式?
- 如果它是一个广泛使用的标准,Java 是否提供任何方法来将它们的整个 String 转换为 char 数组?
【问题讨论】:
标签: java character-encoding multilingual idn