[Android] 解决HanziToPinyin类在HTC One等手机上转换拼音失败BUG
原因:
让我们看看源码是怎么写的,我做了一下修复,稍后再介绍:
public static HanziToPinyin getInstance() { synchronized (HanziToPinyin.class) { if (sInstance != null) { return sInstance; } // Check if zh_CN collation data is available final Locale locale[] = Collator.getAvailableLocales(); Locale newChina = new Locale("zh", "HANS", "CN");//这部分是我做的修复,解决HTC兼容性问题 for (int i = 0; i < locale.length; i++) { if (locale[i].equals(Locale.CHINA) || locale[i].equals(newChina)) { // Do self validation just once. if (DEBUG) { Log.d(TAG, "Self validation. Result: " + doSelfValidation()); } sInstance = new HanziToPinyin(true); return sInstance; } } Log.w(TAG, "There is no Chinese collator, HanziToPinyin is disabled"); sInstance = new HanziToPinyin(false); return sInstance; } }
上面的代码可以看到做了一下检测,看看是不是支持中文,而HTC手机里返回的是zh-Hans-CN,所以自然会返回失败,但是手机确实支持中文,经过调试以后发现返回的Locale数组里有这个东西zh-Hans-CN,我们再看下zh-Hans-CN是什么
zh-Hans 简体中文 zh-Hans-CN 大陆地区使用的简体中文 zh-Hans-HK 香港地区使用的简体中文 zh-Hans-MO 澳门使用的简体中文 zh-Hans-SG 新加坡使用的简体中文 zh-Hans-TW 台湾使用的简体中文 zh-Hant 繁体中文 zh-Hant-CN 大陆地区使用的繁体中文 zh-Hant-HK 香港地区使用的繁体中文 zh-Hant-MO 澳门使用的繁体中文 zh-Hant-SG 新加坡使用的繁体中文 zh-Hant-TW 台湾使用的繁体中文可以看出,Hans是简体中文,Hant是繁体中文。而这样划分更明确。貌似Win8也是这样划分的。
解决方案:
解决方案我已经在原因里贴上去了,其实也就是加入对hans这样的判断,希望兼容5.0,感觉5.0应该也会这样写吧。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。