我正在研究我的android项目。我必须通过我的Android应用程序向服务器应用程序发送一些单词。发送完毕后,我将能够搜索一些调查并将其返回给客户。我的用户使用"波斯语"用于搜索相应主题的字符。
我发现当我将它们(波斯语فارسی
)发送到服务器时,它无法正确识别它们。它适用于" ???? "而不是正确的话。它只是有这个问题的波斯语单词是从Android应用程序发送而不是英语单词。我从未尝试过其他语言,但我认为它也存在这个问题。我认为移动设备有不同的波斯字符和代码。放在服务器中的C#代码无法翻译波斯语单词。让我告诉你,我使用C#实现了android应用程序的服务器端和Java。数据库是SQL Server 2010。
我使用查询字符串来捕获参数。之后,我使用此参数进行查询,从DB返回主题。 C#:
string Tag = Request.QueryString["Tag"].ToString();
爪哇:
这部分显示了我如何将参数发送到服务器。我认为这是通过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;
}
}
我该如何解决我的问题?
答案 0 :(得分:3)
简短回答
使用UTF-8 encoding
如果你有
String message = ...;
将其转换为byte []
byte[] bytes = message.getBytes();
然后必须使用
构造DatagramPacketnew DatagramPacket(bytes, bytes.length(), ... );
您的通话使用
new DatagramPacket( message.getBytes, message.length(),..,
但是这会使用String长度,但是Farsi每个字符需要多个字节。
字符串فارسی
有5个字符,但UTF-8编码需要10个字节。您需要发送10个字节。您的字母表中的UTF-8编码字母需要2个字节,因此这个带5个字母的单词以10个字节编码。数据报包长度必须以字节计数给出。
将parameters
设置为:
String parameters = "parameter1=" + URLEncoder.encode("YOUR_STRING_TO_ENCODE","UTF-8");
然后,在AsyncTask下:
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