[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应该也会这样写吧。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。