关键是要了解UTF-8和Unipre之间的区别。
- Java使用Unipre处理内存中的字符和字符串。每个字符存储在两个字节中。
- 当文本在进程之间传输(例如,到Web服务器) 或 将文本写入磁盘 或 从磁盘读取时,内部表示形式将转换为在线格式。这是编码或解码。UTF-8是最受欢迎的,但是其他格式包括:
- UTF-16
- ISO 8859-1
在您的问题中,您提到XML文件是用utf-8编码的:很好,您将能够在文件中放入外来字符,但这 仅 指定了 该特定XML文件 的编码。
这些XML文件将被编译为Android资源,并将包含正确的值(如果您愿意,可以在调试器中对其进行检查,或者通过保留构建链中的中间Java资源文件来对其进行检查)。
问题几乎可以肯定是在HTTP服务器上发送数据和从HTTP服务器接收数据的地方,特别是在网络上的字节与Java之间转换数据的地方
String。当前,您尚未在请求中设置它-
可以按照Apache
HTTPClient文档中的说明进行设置。
尽管服务器可能已经/需要这样做,但是在请求中明确声明无疑是一件好事。
您还需要确保服务器(Rails 3中)的一个-如何处理PG错误不完整的多字节字符):
- 期待UTF-8
- 使用UTF-8解码器解码请求
- 使用UTF-8编码对响应进行编码
(对不起,但是我不了解Ruby on Rails,所以我不知道该如何具体地提供帮助)。
回到Android端,您还需要确保HTTP库正在使用UTF-8解码器解码响应。如果您自己处理此问题,请确保您使用的String构造函数是该构造函数,并且参数为“
utf-8”:
- 公共字符串(byte []数据,字符串charsetName)
一旦客户端和服务器都使用UTF-8,您的问题将得到解决。
为了帮助在这里调试,我建议:
- 服务器 和 客户端上的许多日志记录语句,它们输出尽可能接近HTTP代码的相关字符串
与配置为通过调试代理进行对话的客户端一起运行。检查请求和响应,并检查它们是否确实为UTF-8。代理包括:
- 查尔斯
- Web疤痕
- 提琴手



