Android 响应:java.nio.charset.UnsupportedCharsetException:utf8mb4
Android Response: java.nio.charset.UnsupportedCharsetException: utf8mb4
我收到这个错误:
java.nio.charset.UnsupportedCharsetException: utf8mb4
而且我还没有找到任何解决方案。
This说解决这个问题没有意义,只要,我换不了服务器端就可以了
我该如何处理这个字符集?
尝试更新您的数据库或运行:
ALTER DATABASE yourdatabasename CHARACTER SET utf8 COLLATE utf8_unicode_ci
如果您无法对后端服务进行任何更改,请尝试根据您的要求更改字符集配置,如下所示:
这是我的解决方案,
这会将 response.body() 解码为 UTF-8
:
String responseResult = null;
try {
Log.d(TAG, response.body().contentType()+"");
BufferedSource source = response.body().source();
source.request(Long.MAX_VALUE); // Buffer the entire body.
Buffer buffer = source.buffer();
responseResult = buffer.clone().readString(Charset.forName("UTF-8"));
Log.d(TAG, "result: "+responseResult);
}catch(Exception e){
// TODO
}
然而,更大的问题是 URL 不正确。如果写错了URL,就会报这个错误
例如,
URL 必须是 example.com/feed/4
但您将请求发送到 example.com/feed
。
在我的例子中,在解码 body 之后,我得到了 404 ERROR
。然后,意识到 URL 是错误的。所以,我修复了它并且工作正常!
解码可能无法正确转换,例如,表情符号。然后,在不转换 body 的情况下进行尝试。它会起作用。
我收到这个错误:
java.nio.charset.UnsupportedCharsetException: utf8mb4
而且我还没有找到任何解决方案。
This说解决这个问题没有意义,只要,我换不了服务器端就可以了
我该如何处理这个字符集?
尝试更新您的数据库或运行:
ALTER DATABASE yourdatabasename CHARACTER SET utf8 COLLATE utf8_unicode_ci
如果您无法对后端服务进行任何更改,请尝试根据您的要求更改字符集配置,如下所示:
这是我的解决方案,
这会将 response.body() 解码为 UTF-8
:
String responseResult = null;
try {
Log.d(TAG, response.body().contentType()+"");
BufferedSource source = response.body().source();
source.request(Long.MAX_VALUE); // Buffer the entire body.
Buffer buffer = source.buffer();
responseResult = buffer.clone().readString(Charset.forName("UTF-8"));
Log.d(TAG, "result: "+responseResult);
}catch(Exception e){
// TODO
}
然而,更大的问题是 URL 不正确。如果写错了URL,就会报这个错误
例如,
URL 必须是 example.com/feed/4
但您将请求发送到 example.com/feed
。
在我的例子中,在解码 body 之后,我得到了 404 ERROR
。然后,意识到 URL 是错误的。所以,我修复了它并且工作正常!
解码可能无法正确转换,例如,表情符号。然后,在不转换 body 的情况下进行尝试。它会起作用。