2017-12-20 141 views
6

Tôi cố gắng để tải về tập tin json mà chứa các ký tự slovenian, khi tải json tập tin như là một chuỗi Tôi nhận được ký tự đặc biệt theo quy định dưới đây trong dữ liệu jsonLàm thế nào để tải về Chuỗi tập tin có chứa ký tự đặc biệt của slovenia

"send_mail": "Po�lji elektronsko sporocilo.", 
"str_comments_likes": "Komentarji, v�ecki in mejniki", 

Mã mà tôi đang sử dụng

URL url = new URL(f_url[0]); 
URLConnection conection = url.openConnection(); 
conection.connect(); 
try { 
    InputStream input1 = new BufferedInputStream(url.openStream(), 300); 
    String myData = ""; 
    BufferedReader r = new BufferedReader(new InputStreamReader(input1)); 
    StringBuilder totalValue = new StringBuilder(); 
    String line; 
    while ((line = r.readLine()) != null) { 
     totalValue.append(line).append('\n'); 
    } 
    input1.close(); 
    String value = totalValue.toString(); 
    Log.v("To Check Problem from http paramers", value); 
} catch (Exception e) { 
    Log.v("Exception Character Isssue", "" + e.getMessage()); 
} 

tôi muốn biết làm thế nào để có được nhân vật tải đúng cách.

+0

xem [Câu hỏi này] (https://stackoverflow.com/questions/15737554/issue-while-downloading-file-with-special-character) nếu bạn chưa có. – ADM

+0

Có thể trùng lặp của [Giải mã UTF-8 String, sau đó mã hóa nó trong 8859-2 cho bảng chữ cái tiếng Slovak] (https://stackoverflow.com/questions/46521867/decoding-utf-8-string-then-encoding-it-in -8859-2-for-slovakian-alphabet) – R2R

+0

Tôi đã thử thay đổi thành UTF-8 hoặc 8859-2, không có gì hiệu quả, chỉ thay đổi những gì tôi thấy là 8859-2 thay đổi ký tự từ thành []. – Rakesh

Trả lời

0

Cuối cùng tôi đã tìm thấy cách này làm việc cho tôi

InputStream input1 = new BufferedInputStream (conection.getInputStream(), 300);

BufferedReader r = new BufferedReader (InputStreamReader mới (input1, "Windows-1252"));

Tôi đã tìm ra bởi windows-1252 này, bằng cách đặt tệp json vào thư mục tài sản của thư mục ứng dụng android, nơi nó hiển thị các ký tự đặc biệt giống như được chỉ định ở trên, ở đó nó hiển thị tùy chọn đề xuất tự động để thay đổi mã hóa thành UTF-8, ISO-8859-1, ASCII và Windows-1252, Vì vậy, tôi đã thay đổi thành windows-1252, hoạt động trong studio android mà tôi sao chép giống nhau trong mã của chúng tôi, hoạt động.

1

Khi tạo InputStreamReader tại dòng này:

 BufferedReader r = new BufferedReader(new InputStreamReader(input1)); 

gửi charset cho các nhà xây dựng như thế này:

 BufferedReader r = new BufferedReader(new InputStreamReader(input1), Charset.forName("UTF_8")); 
+0

Nó không hoạt động. – Rakesh

2

Giải mã dòng trong vòng lặp while có thể làm việc. Ngoài ra bạn nên thêm kết nối của bạn trong try catch khối trong trường hợp IOException

URL url = new URL(f_url[0]); 
try { 
    URLConnection conection = url.openConnection(); 
    conection.connect(); 
    InputStream input1 = new BufferedInputStream(url.openStream(), 300); 
    String myData = ""; 
    BufferedReader r = new BufferedReader(new InputStreamReader(input1)); 
    StringBuilder totalValue = new StringBuilder(); 
    String line; 
    while ((line = r.readLine()) != null) { 
     line = URLEncoder.encode(line, "UTF8"); 
     totalValue.append(line).append('\n'); 
    } 
    input1.close(); 
    String value = totalValue.toString(); 
    Log.v("To Check Problem from http paramers", value); 
} catch (Exception e) { 
    Log.v("Exception Character Isssue", "" + e.getMessage()); 
} 
+0

Nó đã có trong khối try/catch – Rakesh

2

Nó không hoàn toàn rõ ràng lý do tại sao bạn không sử dụng lớp JSONObject Android (và các lớp học có liên quan). Bạn có thể thử này, tuy nhiên:

String str = new String(value.getBytes("ISO-8859-1"), "UTF-8"); 

Nhưng bạn thực sự cần sử dụng các thư viện JSON hơn là phân tích bản thân

3

Bạn cần để mã hóa chuỗi byte sang UTF-8. Vui lòng kiểm tra mã sau:

String slovenianJSON = new String(value.getBytes([Original Code]),"utf-8"); 
JSONObject newJSON = new JSONObject(reconstitutedJSONString); 
String javaStringValue = newJSON.getString("content"); 

Tôi hy vọng nó sẽ giúp bạn!

1

vấn đề nằm trong bộ ký tự

theo Wikipedia Bảng chữ cái tiếng Slovenia được UTF-8, UTF-16, ISO/IEC 8859-2 hỗ trợ (Latin-2). tìm bộ ký tự nào được sử dụng trong máy chủ và sử dụng cùng một bộ ký tự để mã hóa.

nếu nó là UTF-8 mã hóa như thế này

 BufferedReader bufferedReader= new BufferedReader(new InputStreamReader(inputStream), Charset.forName("UTF_8")); 

nếu bạn có deffrent bộ ký tự sử dụng.

1

Tôi đã gặp phải vấn đề tương tự vì các ký tự tiếng Thụy Điển.

Vì vậy, tôi đã sử dụng BufferedReader để giải quyết vấn đề này. Tôi đã chuyển đổi Phản hồi bằng cách sử dụng StandardCharsets.ISO_8859_1 và sử dụng phản hồi đó. Xin vui lòng tìm câu trả lời của tôi như dưới đây.

BufferedReader r = new BufferedReader(new InputStreamReader(response.body().byteStream(), StandardCharsets.ISO_8859_1)); 
    StringBuilder total = new StringBuilder(); 
    String line; 

    while ((line = r.readLine()) != null) 
    { 
     total.append(line).append('\n'); 
    } 

và sử dụng số này total.toString() và gán câu trả lời này cho lớp học của tôi.

Tôi đã sử dụng Retrofit để gọi dịch vụ web.

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