SORU
15 NİSAN 2011, Cuma


Dize dönüştürme bayt dizisi (Java)

Google app Engine bir web uygulaması yazıyorum. İnsanlar temelde blobstore .html dosyası olarak saklanan bir html kodu düzenleme sağlar.

FetchData dosyadaki tüm karakterler byte[] dönüş için kullanıyorum. Kullanıcı için bir html kodu düzenleme için baskı yapmaya çalışıyorum. Her şey mükemmel çalışıyor!

İşte şimdi tek sorunum:

Bayt dizisinin tekrar bir dizeye dönüştürme sırasında bazı sorunları var. Akıllı tırnaklar ve birkaç karakter funky görünümlü çıkıyor. (?'s veya Japonca semboller vb.) Özellikle negatif değerler görüyorum soruna neden olan birkaç bayt.

Akıllı tırnaklar geri -108 ve bayt dizisi -109 gibi geliyor. Neden bu kadar doğru karakter kodlamasını göstermek için negatif bayt çözebilir miyim?

CEVAP
15 NİSAN 2011, Cuma


Bayt dizisinin özel bir kodlama karakterleri bilmeli () içerir. Bir Dize dönüştürmek için bir yoldur:

String decoded = new String(bytes, "UTF-8");  // example for one encoding type

- Ham bayt görünür 8 ** java türü imzalı olduğu için negatif ondalık olarak görünebilir, 127 -128 aralığı kapsar.


-109 = 0x93: Control Code "Set Transmit State"

Değeri (-109) UNİCODE olmayan yazdırılabilir bir denetim karakteri. UTF-8 karakter akışı için doğru bir kodlama değildir.

0x93 "Windows-1252" "akıllı alıntı kodlama Java ismi çok aradığınız","". Cp1252 içinde Sonraki satır test kodu sağlar:

System.out.println(new String(new byte[]{-109}, "Cp1252")); 

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ecf150king

    ecf150king

    20 Ocak 2006
  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012
  • The Fashion Sight

    The Fashion

    22 AĞUSTOS 2011