我从上游数据源收到了一些XML。
我不确定这些奇怪的字符是否有效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
-------------------------------------------------------------------------------------------
’ | U+2019 | \xe2\x80\x99 | RIGHT SINGLE QUOTATION MARK
• | U+2022 | \xe2\x80\xa3 | BULLET
& | -not unicode- | -- | Ampsersand, HTML Encoded.
是排序编码但是做错了吗?
有人可以解释我在看什么,所以我知道如何正确解码它。令人沮丧的是,我觉得这可能是编码的混合,会使事情变得糟糕:(
参考:http://utf8-chartable.de/unicode-utf8-table.pl?start=8192&number=128&utf8=string-literal
答案 0 :(得分:4)
由于&#xXX;
编码字符的字符转义,因此您收到的XML中的UTF-8不是问题,因此不存在编码是什么的问题。 [实际上,它可能就是这样,因为生成XML的任何东西都可能是由那些不了解XML逃逸是如何工作的人编写的。毕竟,一旦出现问题,除非得到证实,否则毫无意义地假设它做了正确的事情。]
它确实看起来像是在处理一些非常好的UTF-8,好像它是一个不同的编码,然后决定逃避结果。由此产生的一些字符('U + 0080'和'U + 0099')是XML中允许的字符,但强烈建议不要使用。有些('â'和'¢')是完全明智的角色(尽管以非明智的方式产生),这使得逃避它的决定几乎与导致他们在那里的任何错误一样奇怪。
无论mojibake的来源是什么,你都会得到mojibake,所以如果你可以抱怨或报告上游的bug,那么就这样做并在源头修复它而不是试图修复破坏的东西。
否则你将不得不尝试对角色进行解读,将它们编码为好像它们是他们认为的任何格式(我猜ISO拉丁语1,但还有其他可能性),然后解码它们就像他们是UTF-8。没有任何承诺,这不会对文档的正确位置造成同样大的损害,因为它会撤消到那个错误的位。