我正在从事我的Android项目。我必须通过我的Android应用程序向服务器应用程序发送一些单词。发送它们后,我将能够搜索一些调查并将其退还给客户。我的用户使用"波斯"字符搜索其适当的主题。
我发现,当我将它们(波斯语单词فارسی
)发送到服务器时,它无法正确识别它们。它在" ???"的流中起作用,而不是正确的单词。它只是带有来自Android应用程序而不是英语单词的波斯语单词的问题。我从未尝试过其他语言,但我认为它也有这个问题。我认为移动设备具有波斯字符的不同代码&服务器中放置的C#代码不能翻译波斯语单词。让我告诉您,我使用C#实现服务器端,而Java用于Android应用程序&数据库是SQL Server2010。
我使用查询字符串捕获参数。之后,我使用此参数进行查询,以从DB返回主题。C#:
string Tag = Request.QueryString["Tag"].ToString();
java:
本部分显示了我如何将参数发送到服务器。我认为这是通过HTTP协议发送参数的通常方法。
HttpURLConnection urlConnection = null;
try{
URL myUrl=new URL("http://10.0.2.2:80/Urgence/SearchResault.aspx?Tag="+Tag);
urlConnection = (HttpURLConnection)myUrl.openConnection();
BufferedReader in = new BufferedReader (new InputStreamReader(urlConnection.getInputStream()));
String temp="";
// Data is used to store Server's Response
while((temp=in.readLine())!=null)
{
Data=Data+temp;
}
}
我应该如何解决我的问题?
简短答案
使用UTF-8编码
如果您有
String message = ...;
这将转换为字节[]
byte[] bytes = message.getBytes();
然后必须使用
构建数据工具包new DatagramPacket(bytes, bytes.length(), ... );
您的电话使用
new DatagramPacket( message.getBytes, message.length(),..,
,但这使用了字符串长度,但Farsi每个字符需要多个字节。
字符串فارسی
具有5个字符,但是UTF-8编码需要10个字节。您需要发送10个字节。utf-8编码中字母的一个字母需要2个字节,因此该单词带有5个字母的字母在10个字节中编码。数据报数据包长度必须在字节计数中给出。
更新
将parameters
设置为:
String parameters = "parameter1=" + URLEncoder.encode("YOUR_STRING_TO_ENCODE","UTF-8");
然后,在异步下:
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setFixedLengthStreamingMode(params.getBytes().length);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
PrintWriter out = new PrintWriter(conn.getOutputStream());
out.print(params);
out.close();
String response = "";
Scanner inStream = new Scanner(conn.getInputStream());
while (inStream.hasNextLine()) {
response += (inStream.nextLine());
}
然后,这样,您将获得服务器的结果:
- movaffagh baash