这是此xml文件中的有效UTF8字符吗?

时间:2017-09-05 06:32:07

标签: xml utf-8 html-encode html-escape-characters

我从上游数据源收到了一些XML。

enter image description here

我不确定这些奇怪的字符是否有效UTF8 - 或者 - 上游来源搞砸了。即=>中的错误数据糟糕的数据。

我猜测以下是传下来的内容:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingTop="@dimen/all_pages_padding_top"
tools:context="driver.mci.ir.mcicardriver.activity.MessagesActivity">

<ExpandableListView
    android:id="@+id/messagesListView"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:background="@color/colorBackground"
     **android:layout_above="@+id/textLayout"**
    android:layout_gravity="right|top">
</ExpandableListView>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
   **android:id="@+id/textLayout"**
    android:layout_alignParentBottom="true"
    android:orientation="horizontal">

    <ImageButton
        android:id="@id/imageView3"
        android:layout_width="@dimen/login_icon_size"
        android:layout_height="@dimen/login_icon_size"
        android:scaleType="fitXY"
        android:src="@drawable/sendmessage"
        android:layout_alignParentEnd="true"
        android:layout_alignParentTop="true"
        />
    <EditText
        android:id="@+id/userName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView3"
        android:layout_toStartOf="@+id/imageView3" />

</RelativeLayout>

我觉得UFT-8值开头的Value in XML file | Unicode Value | UTF-8 Value | English Description ------------------------------------------------------------------------------------------- &#xE2;&#x80;&#x99; | U+2019 | \xe2\x80\x99 | RIGHT SINGLE QUOTATION MARK &#xE2;&#x80;&#xA2; | U+2022 | \xe2\x80\xa3 | BULLET &amp; | -not unicode- | -- | Ampsersand, HTML Encoded. 是排序编码但是做错了吗?

有人可以解释我在看什么,所以我知道如何正确解码它。令人沮丧的是,我觉得这可能是编码的混合,会使事情变得糟糕:(

参考:http://utf8-chartable.de/unicode-utf8-table.pl?start=8192&number=128&utf8=string-literal

1 个答案:

答案 0 :(得分:4)

由于&#xXX;编码字符的字符转义,因此您收到的XML中的UTF-8不是问题,因此不存在编码是什么的问题。 [实际上,它可能就是这样,因为生成XML的任何东西都可能是由那些不了解XML逃逸是如何工作的人编写的。毕竟,一旦出现问题,除非得到证实,否则毫无意义地假设它做了正确的事情。]

它确实看起来像是在处理一些非常好的UTF-8,好像它是一个不同的编码,然后决定逃避结果。由此产生的一些字符('U + 0080'和'U + 0099')是XML中允许的字符,但强烈建议不要使用。有些('â'和'¢')是完全明智的角色(尽管以非明智的方式产生),这使得逃避它的决定几乎与导致他们在那里的任何错误一样奇怪。

无论mojibake的来源是什么,你都会得到mojibake,所以如果你可以抱怨或报告上游的bug,那么就这样做并在源头修复它而不是试图修复破坏的东西。

否则你将不得不尝试对角色进行解读,将它们编码为好像它们是他们认为的任何格式(我猜ISO拉丁语1,但还有其他可能性),然后解码它们就像他们是UTF-8。没有任何承诺,这不会对文档的正确位置造成同样大的损害,因为它会撤消到那个错误的位。