Android将UTF-8字符串与UTF-8输入字符串edittext进行比较

Android将UTF-8字符串与UTF-8输入字符串edittext进行比较,第1张

概述在我的Android应用程序中,我想比较一个utf-8字符串,例如“bãi”与用户在edittext上键入的字符串.但是,如果我通过使用方法edittext.getText().toString()键入“bãi”到edittext并获取输入字符串,它将返回字符串它不等于“bãi”我也试试Stringinput=newString(input.get

在我的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进行比较所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1119520.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存