xml ファイルをサーバーに送信する Android アプリがあります。xml ヘッダーのエンコーディングを utf-8 に設定すると、たとえば日本の記号のような奇妙な文字が現れるまですべて機能します。この場合、サーバーは xml を utf-8 ではないとして拒否します。私はサーバーがどのように機能するかを制御できませんが、それは確立された製品であるため、最終的には何もありません.
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");
}