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

  • Autodesk 3ds Max Learning Channel

    Autodesk 3ds

    23 HAZİRAN 2010
  • Cole Rolland

    Cole Rolland

    23 Kasım 2008
  • Deany Boii

    Deany Boii

    27 Kasım 2007