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

  • Cartoonium

    Cartoonium

    11 NİSAN 2011
  • habpsu

    habpsu

    25 Temmuz 2007
  • SuicideSheeep

    SuicideSheee

    8 Ocak 2012