如何从英印sqlite数据库取值并在控制台正确打印印地语释义文本
问题原因及解决方案
根因分析
你使用的SQLite字典库中的印地语释义未存储标准Unicode编码的天城文内容,存储的是定制字体专属的ASCII转写字符串:你加载的印地语Typeface内部做了ASCII字符到印地语字形的自定义映射,所以TextView设置对应字体后可以渲染出正确的印地语文本;而System.out.println只会输出原始存储的ASCII字符串,没有对应的字体映射逻辑,因此输出内容看起来是乱码。
解决方案
- 方案1:仅需控制台输出场景
先整理当前所用印地语定制字体的字符映射规则,构建ASCII转写字符到标准Unicode天城文的映射字典,转换后再打印即可,示例逻辑如下:// 先根据字体映射规则补全所有对应关系,以下为示例映射 Map<String, String> transToUnicodeMap = new HashMap<>(); transToUnicodeMap.put("lR;", "प्र"); transToUnicodeMap.put("kHkklh", "कथित"); transToUnicodeMap.put("]", " "); // 省略其余映射规则 // 自定义转换方法完成映射替换 private String convertToUnicode(String transStr, Map<String, String> map) { // 按规则替换所有转写字段为Unicode编码 for (Map.Entry<String, String> entry : map.entrySet()) { transStr = transStr.replace(entry.getKey(), entry.getValue()); } return transStr; } // 转换后打印即可输出正常印地语 String hindiMeaning = "lR;kHkklh]diViw.kZ]"; String unicodeHindi = convertToUnicode(hindiMeaning, transToUnicodeMap); System.out.println(unicodeHindi); - 方案2:全场景通用改造
批量转换SQLite库中所有印地语释义为标准Unicode编码后重新存储,后续所有业务场景(包括打印、跨端使用、内容分享等)都不需要依赖定制字体,兼容性更强。
注意:不要尝试通过修改控制台编码解决该问题,原始数据本身不是Unicode编码的印地语文本,调整编码无法生效。
内容的提问来源于stack exchange,提问作者Mahadi Hasan Sunny
相关产品推荐
相关产品推荐

