2012-01-29 2 views
2

У меня нет опыта java, и я только начинаю экспериментировать с обработкой.Обработка кодировки вывода отличается от кодировки Java.io?

Я пытаюсь написать сценарий в обработке, который отправит 512-байтовый массив, используя команду http post для веб-сервера. Все это хорошо работает (благодаря коду, который я выкопал в Интернете!), Но у меня есть некоторые проблемы с кодировками. Я создаю массив символов, заполненный 0xFF. Это печатает как 512 'ÿ' символов в окне вывода, как должно. Проблема заключается в том, что HTTPScoop показывает post hex как серию символов 0xD8 или символ «Ø». Я не уверен, почему консоль печатает один символ, и поток вывода, кажется, посылает другой.

код ниже:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.net.URL; 
import java.net.URLConnection; 
import java.net.URLEncoder; 

public static void main(String[] args) { 
    try { 
    // Construct data 
    char[] anArray = new char[512]; 
    char charFillValue = 0xFF; 
    Arrays.fill(anArray, charFillValue); 

    String str = new String(anArray); 
    println(str); 

    String data = str; 
    println(data); 

    // Send data 
    URL url = new URL("http://10.10.155.120:8081/set.cgi?dst=p1"); 
    URLConnection conn = url.openConnection(); 
    conn.setDoOutput(true); 
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
    wr.write(data); 
    wr.flush(); 

    // Get the response 
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    String line; 
    while ((line = rd.readLine()) != null) { 
     System.out.println(line); 
    } 
    wr.close(); 
    rd.close(); 
} catch (Exception e) { 
} 
} 

Любая помощь будет высоко ценится!

+0

'catch (Exception e) {}' Не игнорируйте исключения в сломанном коде! Это должно быть 'catch (Exception e) {e.printStackTrace();}'. (Это не проблема, но все равно исправить). –

+0

Спасибо, Андрей, исключения больше не игнорируются! (В приведенном выше фрагменте нет исключений). – tsugua

ответ

1

Основная проблема заключается в том, что стандартная кодировка Java и кодировка сервера не совпадают. Установите кодировку в OutputStreamWriter. НАПРИМЕР. используя конструктор OutputStreamWriter(OutputStream,encoding).

+0

Фантастический! Похоже, это кодировка ISO! Спасибо за вашу помощь! новый код: OutputStreamWriter wr = new OutputStreamWriter (conn.getOutputStream(), «ISO8859_1»); – tsugua

Смежные вопросы