变形虫的奇怪编码(äöü)

问题描述 投票:2回答:1

我目前正在制作一个学校项目,我需要从网站下载数据(通过抓取)并在Android应用中处理/显示它。下载的数据通常包含像ä这样的字母,可以毫无疑问地在TextView中完美显示。

有时,我收到的数据有差距,我的解析器在下载后会填充。它不显示textThatContainsÄ,而是显示 。轻松修复:

String data = downloadFromServer();

// Fill the gap
data = data.replace(" ", textThatContainsÄ);

输出如预期:

Output: [..]ä[..]

我上面写的逻辑被打包成一个.jar并导入我的Android应用程序。由于封装,我下载的数据在Android应用程序中不受任何影响。

现在来了扭曲。如果从服务器下载的数据最初不包含textThatContainsÄ(这样我的解析器必须填补空白)Android将其解释为textThatContainsä,这显然是一个UTF-8编码问题,这是由于将UTF-8字节视为Windows-1252 (or ISO 8859-1)字节(Android)将文本解释为21而不是18个字节(文本大小为9))。如果数据最初包含ä,则不会发生此问题。

我不知道为什么java代码生成的ä会在Android中产生编码问题。

编辑:是由Gradle引起的。

java android gradle
1个回答
1
投票

我使用Gradle拍摄自己的腿。经过一些研究,我发现Gradle通常不会默认使用.java编译UTF-8文件。因此,当我编译.jar时,它意外地将ä翻译成ä,正如我在反编译的.class文件中看到的那样。

通过添加下面的代码,整个问题得以解决。

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}
© www.soinside.com 2019 - 2024. All rights reserved.