Android EditText不会返回正确的UTF-8文本

时间:2016-05-29 08:19:19

标签: android encoding utf-8 android-edittext

我有一个Edittext来填写搜索字符串:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical" android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:layout_marginLeft="10dp"
  android:layout_marginRight="10dp">

  <EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/search_input_edittext"
    android:gravity="center_horizontal"
    android:layout_gravity="center_horizontal" />

  <Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:padding="10dp"
    android:background="@drawable/add_to_cart_btn"
    android:text="@string/search"
    android:id="@+id/search_search_btn"
    android:stateListAnimator="@null"
    android:layout_gravity="center_horizontal" />
 </LinearLayout>

但是我输入的越南语单词不正确getText().getString()。它应该是(我手动输入这个)

  

CU

但我从代码中得到了什么:

EditText search_edittext = (EditText) v_iew.findViewById(R.id.search_input_edittext); //v_iew is from inflating for `AlertDialog`
search_edittext.getText().toString();

如下图所示:

enter image description here

我认为它们的编码方式不同。钩子必须在“u”之上。但是,如果我复制整个单词并粘贴到任何编辑器,它显示完全相同。这就是我在这里粘贴时的样子:

  

CU

如果我只复制钩子就会发生这种情况

  

̉

它们看起来一样,但EditText中的内容不能用于进一步的工作。

如果我从互联网上复制这个词并粘贴到搜索栏中,它就可以了!所以这是导致问题的输入法。试图搜索将它们转换为unicode(带有\ xxxx的那个),但没有运气。

任何人都知道如何将输入转换为“普通格式”?谢谢你的时间!

3 个答案:

答案 0 :(得分:1)

如果您在通过API发送正确的格式化文本时遇到问题,只需在HttpClient中设置UTF(假设,它是您正在使用的UTF字体)支持。不要担心Log中显示的内容。自定义字体很容易在日志中呈现错误。

HttpPost post = new HttpPost(url);
StringEntity stringEntity = new StringEntity(payload, "UTF-8");

post.setEntity(stringEntity);
HttpResponse response = httpclient.execute(httppost);

更新:如果只需要对部分网址进行编码,请按以下方式使用,

String url = URLEncoder.encode(params[0], "utf-8");
HttpPost post = new HttpPost(url);
//Rest of the code 

答案 1 :(得分:0)

您可以使用: String sNFC = Normalizer.normalize(search_edittext.getText()。toString(),Normalizer.Form.NFC);

答案 2 :(得分:0)

这是我在搜索数小时后找到的唯一解决方案。

String urlParameters = "";//sn=C02G8416DRJM&cn=&locale=&caller=&num=12345
    if(parameters != null) {
        for (Map.Entry<String, String> entry : parameters.entrySet()) {

            String val;
            if(!TextUtils.isEmpty(entry.getValue()))
                val = URLEncoder.encode(entry.getValue());
            else
                val = "";

            urlParameters += entry.getKey() + "=" + val + "&";
        }
    }