EditText 返回增强的 ISO-8859-1 编码,而非 UTF-8 编码用于德语umlauts?

3

我感到非常困惑。我有一些EditText,它明显返回ISO-8859-1或甚至混合的8859-1+UTF8字符串。

我的理解一直以来是,Android完全支持UTF-8,所以这甚至不可能发生。

例如: 在EditText中输入"wüste"。一个转换为十六进制的字符串返回这个字节码:57 fc 73 74 65,我的期望是:57 c3bc 73 74 65

在EditText中输入"wüste テスト",返回的是57 fc 73 74 65 20 30c6 30b9 30c8,这现在甚至是扩展的8859-1和UTF-8的混合。

这是期望的和想要的行为吗?我能在哪里更改它? 当我使用JSON将数据发送到服务器时,我意识到了这种行为,并且因为非法的UTF-8字符而退出。

谢谢, Oliver

1个回答

10

Java(因此也包括Android)字符串并非UTF-8,而是UTF-16。显示的字节是Unicode代码点。

如果您想将字符串作为UTF-8发送(直接发送或通过任何可能使用的JSON库),则需要将其转换为UTF-8。可以通过调用getBytes("UTF8")方法,将您的字符串转换为所需编码的字节数组来实现。


4
哎呀,这不是我第一次把那些utf/unicode的东西搞混了……谢谢你指出正确的方向。实际上,我只需要将 StringEntity(postdata) 改为 StringEntity(postdata,HTTP.UTF_8) - Oliver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接