2009-07-08 11 views
5

java MIDP kullanarak, denetime sahip olduğum bir sunucudan UTF-8 dizeleri okumak istiyorum. Sunucum UTF-8 verilerini gönderiyor. Aşağıdaki kod yaklaşırsa: Bir sunucudan UTF8 dizelerini okuma aracılığıyla http kullanarak MIDP

 c = (StreamConnection) Connector.open(
      myServer, Connector.READ_WRITE); 
     InputStream is = c.openInputStream(); 
     StringBuffer sb = new StringBuffer(); 
     int ch; 
     while((ch = is.read()) != -1) 
      sb.append((char)ch + "->" + ch + "\n"); 

Ben kömürü ve hata ayıklama amacıyla için kodunu yazdırmak. Burada ASCII karakterlerini okudum, bu yüzden, kodunun 127'nin üzerinde bir kodu varsa, iki örnek gibi iki karakter aldım:

letter á. UTF kodu E1 (onaltılık). 195 ve sonra 161

harf ô. UTF kodu F4 (onaltılık). 195 ve sonra 180

Sorularım, UTF karakterlerini doğrudan okumamın bir yolu var mı? Web'de bazı çözümler buldum, ancak hiçbiri MIDP'ye uymuyor.

cevap

10

Bayt okumak yerine, karakterleri okuyun. Baytları karakterlere dönüştürmek ve UTF-8 kodlayıcı boyunca çalıştırmak için InputStreamReader API kullanın. JavaME CLDC (JSR 30) profilinin bir parçası olarak desteklenmelidir; bağlantı noktaları burada. Böyle

deneyin şey: Sadece mükemmel

c = (StreamConnection) Connector.open(
     myServer, Connector.READ_WRITE); 
Reader r = new InputStreamReader(c.openInputStream(), "UTF-8"); 
StringBuffer sb = new StringBuffer(); 
int ch; 
while((ch = r.read()) != -1) 
    sb.append((char)ch + "->" + ch + "\n"); 
+0

. Teşekkürler! –

+0

Büyük cevap için teşekkürler mega çok yardımcı oldu. Bu satırda bir küçük yorum: 'Okuyucu r = InputStreamReader (c.openInputStream()," UTF-8 ");', Bu şekilde kullanırsam sadece benim için çalışır: 'Reader r = new InputStreamReader (c .openInputStream(), "UTF-8"); 'Tekrar teşekkürler !! –