在我的Android应用程序中,我想比较一个utf-8字符串,例如“bãi”与用户在edittext上键入的字符串.
但是,如果我通过使用方法edittext.getText().toString()键入“bãi”到edittext并获取输入字符串,它将返回字符串
它不等于“bãi”
我也试试
String input = new String(input.getBytes("UTF-8"), "UTF-8");
但它不起作用. input.equals(“bãi”)将返回false.
有谁知道如何解决这个问题.
谢谢你的帮助.
解决方法:
在Unicode中,某些字符可以以多种方式表示.例如,在单词bãi中,中间字符可以用两种方式表示:
>单个代码点U 00E3(带有TILDE的拉丁文小写字母A)
>两个代码点U 0061(LATIN SMALL LETTER A)和U 0303(COMBINING TILDE)
为了显示,两者应该看起来一样.
对于字符串比较,这会产生问题.解决方案是首先根据Unicode Standard Annex #15 — Unicode Normalization Forms标准化字符串.
Java版(包括AndroID)支持规范化Normalizer class(适用于AndroID,请参阅Normalizer).
下面的代码显示了结果:
String s1 = "b\u00e3i";String s2 = "ba\u0303i";System.out.println(String.format("Before normalization: %s == %s => %b", s1, s2, s1.equals(s2)));String n1 = normalizer.normalize(s1, Form.NFD);String n2 = normalizer.normalize(s2, Form.NFD);System.out.println(String.format("After normalization: %s == %s => %b", n1, n2, n1.equals(n2)));
它输出:
Before normalization: bãi == bãi => falseAfter normalization: bãi == bãi => true
BTW:表单Form.NFD分解字符串,即它用两个代码点创建更长的表示. Form.NFC将创建更短的表单.
总结以上是内存溢出为你收集整理的Android将UTF-8字符串与UTF-8输入字符串edittext进行比较全部内容,希望文章能够帮你解决Android将UTF-8字符串与UTF-8输入字符串edittext进行比较所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)