2012-07-22 25 views
6

Chào mừng tất cảLàm thế nào để đọc InputStream với UTF-8?

Tôi đang phát triển một ứng dụng Java, gọi PHP từ internet là nó cung cấp cho tôi phản hồi XML.

Trong câu trả lời chứa từ này: "Próximo", nhưng khi tôi phân tích cú pháp các nút của XML và nhận phản hồi thành biến String, tôi nhận được từ như sau: "Pr & oacute; ximo" .

Tôi chắc chắn rằng vấn đề là tôi đang sử dụng mã hóa khác nhau trong ứng dụng Java sau đó mã hóa tập lệnh PHP. Sau đó, tôi giả sử tôi phải đặt mã hóa giống như trong PHP xml, UTF-8

Đây là mã tôi đang sử dụng để geat tệp XML từ PHP.

¿Tôi nên thay đổi điều gì trong mã này để đặt mã hóa thành UTF-8? (lưu ý rằng im không sử dụng đầu đọc bufered, tôi đang sử dụng input stream)

 InputStream in = null; 
     String url = "http://www.myurl.com" 
     try {        
      URL formattedUrl = new URL(url); 
      URLConnection connection = formattedUrl.openConnection(); 
      HttpURLConnection httpConnection = (HttpURLConnection) connection; 
      httpConnection.setAllowUserInteraction(false); 
      httpConnection.setInstanceFollowRedirects(true); 
      httpConnection.setRequestMethod("GET"); 
      httpConnection.connect();    
      if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) 
       in = httpConnection.getInputStream(); 

      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();      
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document doc = db.parse(in); 
      doc.getDocumentElement().normalize();    
      NodeList myNodes = doc.getElementsByTagName("myNode"); 
+1

Bạn có chắc chắn nó là một vấn đề mã hóa? Bạn đã thử nghiệm nội dung PHP của mình bằng trình duyệt web chưa? Tôi nghĩ XML nguồn chứa ký tự thoát! –

+1

bạn đã đặt một câu hỏi khác tại đây: http://stackoverflow.com/questions/11494069/problems-parsing-spanish-characters-a-e-i-o-u-from-xml-response câu trả lời ở đó từ @kgb là những gì bạn nên xem. đây không phải là vấn đề về mã hóa. có vẻ như nội dung của xml là một số dữ liệu html và dữ liệu đó đã được thoát. bạn cần phải unescape nó. liên kết sau đây cho bạn thấy cách html thoát khỏi một số charachters đặc biệt trong ngôn ngữ forign http://www.thesauruslex.com/typo/eng/enghtml.htm –

Trả lời

7

Khi bạn nhận được của bạn InputStream đọc byte[] s từ nó. Khi bạn tạo chuỗi của mình, hãy nhập vào số CharSet cho "UTF-8". Ví dụ:

byte[] buffer = new byte[contentLength]; 
int bytesRead = inputStream.read(buffer); 
String page = new String(buffer, 0, bytesRead, "UTF-8"); 

Lưu ý, có thể bạn sẽ muốn làm cho bộ đệm của bạn có kích thước sane (như 1024) và liên tục được gọi là inputStream.read(buffer).


@Amir Pashazadeh

Vâng, bạn cũng có thể sử dụng một InputStreamReader, và cố gắng thay đổi dòng parse() tới:

Document doc = db.parse(new InputSource(new InputStreamReader(in, "UTF-8"))); 
+0

Điều gì về InputStreamReader? –

+0

Có một giải pháp nào không yêu cầu đọc toàn bộ 'InputStream' trả trước vào bộ nhớ không? Đôi khi nó có thể khá lớn ... –

+0

tôi không thể sửa mã của tôi với giải pháp của bạn ... xin vui lòng, bạn có thể chỉnh sửa mã của tôi với giải pháp của bạn vì vậy tôi có thể kiểm tra nó với tập tin php xml của tôi? – Pableras84

Các vấn đề liên quan