2013-05-17 182 views
0

我有一個將xml文件發送到服務器的Android應用程序。如果我將xml頭文件的編碼設置爲utf-8,它將一直運行,直到出現像日文符號這樣的奇怪字符爲止,在這種情況下,服務器拒絕將xml作爲utf-8。我無法控制服務器是如何工作的,但它是一種成熟的產品,所以它不在最後。嘗試通過utf-8在Android套接字中發送xml

在發送xml之前,我將包含它的字符串打印到終端,並且所有字符都正確顯示。

我怎麼知道我創建的字符串是否真的是utf-8,如果是,我怎樣才能通過套接字將它作爲utf-8發送。

這是我的文件讀入到一個字符串:

file = new File (filePath); 
FileReader fr = new FileReader (file); 
BufferedReader br = new BufferedReader(fr); 

// Reading the file 
String line; 
while((line=br.readLine())!=null) 
data += line + '\n'; 
br.close(); 

而且這是我送的字符串

Socket socketCliente = new Socket(); 

try { 
    socketCliente.connect(new InetSocketAddress(address, port), 2000); 
} catch (UnknownHostException e) { 
     getError("Host doesn't exist"); 
    return -1; 
} catch (IOException e) { 
    getError("Could not connect: The host is down"); 
    return -1; 
} 

DataOutputStream serverOutput = null; 

try { 
    serverOutput = new DataOutputStream(socketCliente.getOutputStream()); 
} catch (IOException e1) { 
    getError("Could not get Data output stream"); 
} 

try { 
serverOutput.writeBytes(data); 
} catch (IOException e) { 
getError("Could not write on server"); 
} 

如果我打印的「數據」字符串正確發送前,所有角色都顯示正確。

我已經嘗試了無數不同的方式讀入字符串並以不同的方式寫入套接字,但它們或者沒有任何區別,或者即使使用標準字符也不會停止xml的接收。

求助: 而不是從文件讀取到字符串我讀到一個字節數組,然後發送它。

file = new File(filePath); 
    int size = (int) file.length(); 
    data = new byte[size]; 
    try { 
     BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file)); 
     buf.read(data, 0, data.length); 
     buf.close(); 
    } catch (FileNotFoundException e) { 
     getError("File not found"); 
    } catch (IOException e) { 
     getError("Could not read from file"); 
    } 

回答

0

Java通常使用UTF-16編碼。要使用UTF-8,具體來說,應該使用InputStreamReader(帶有FileInputStream)和PrintWriter(帶有套接字的OutputStream),並使用允許指定所需字符集的構造函數的變體(本例中爲UTF-8) 。

如果您在應用程序中使用Guava,可以使用幾個實用程序來提供幫助,包括Files.newReader()和ByteStreams.copy()。

+0

我只是試過,但服務器似乎不喜歡PrintWriter – MarkHolland