Я создал приложение для Android, и на самом деле все работает нормально.Связана ли эта неправильная кодировка функций?
Я получаю данные с сервера через WebSockets, но перед его отправкой клиенту он сжимается с GZIPOutputStream
на сервере, как это:
public class GZip {
public static ByteBuffer compress(String msg) {
if(msg == null || msg.length() == 0)
return null;
ByteBuffer bytes = null;
try {
ByteArrayOutputStream obj=new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(obj);
gzip.write(msg.getBytes("UTF-8"));
gzip.close();
bytes = ByteBuffer.wrap(obj.toByteArray());
} catch(Exception e) {
return null;
}
return bytes;
}
}
На стороне клиента (Android приложение) String msg
распаковывается по:
private static final Charset UTF8_CHARSET = Charset.forName("UTF-8");
public static String decompress(byte[] compressed) {
String msg = null;
try {
final int BUFFER_SIZE = 32;
ByteArrayInputStream is = new ByteArrayInputStream(compressed);
GZIPInputStream gis = new GZIPInputStream(is, BUFFER_SIZE);
StringBuilder string = new StringBuilder();
byte[] data = new byte[BUFFER_SIZE];
int bytesRead;
while ((bytesRead = gis.read(data)) != -1) {
string.append(new String(data, 0, bytesRead, UTF8_CHARSET));
}
gis.close();
is.close();
msg = string.toString();
} catch (Exception e) {
e.printStackTrace();
}
return msg;
}
Таким образом, от моего понимания это не должно производить никаких проблем при dealiing с не US-ASCII символов, так как все ен- или правильно декодировать в UTF-8.
Например, рассмотрите слово Eckstoß
, которое содержит специальный символ ß
. Так вот пример из трех TextViews
в Android приложение, которое одновременно отображать слово Eckstoß
Что я нахожу очень странным здесь, является тот факт, что все три версии слова Exkstoß
имеют собственные ванные/декодируется как описано выше. Однако в одной строке оно отображается неправильно.
Однако, это даже будет (IMHO) weireder. Это фактически список, и когда (из-за прокрутки) TextView
исчезает и снова появляется (например, вниз по экрану), тогда (иногда) символы затем отображаются правильно.
Что может вызвать эту странную проблему?
У меня возникло ощущение, что у вас нет проблем с передачей контента, возможно, с сообщением, которое вы генерируете, или, возможно, с созданием пользовательского интерфейса. Когда вы отлаживаете сообщение после декомпрессии, все выглядит нормально? –