解码android中的字符

时间:2015-05-05 13:55:15

标签: java c# android

我正在研究我的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;        
                }    
            }

我该如何解决我的问题?

1 个答案:

答案 0 :(得分:3)

简短回答

  

使用UTF-8 encoding

如果你有

String message = ...;

将其转换为byte []

byte[] bytes = message.getBytes();

然后必须使用

构造DatagramPacket
new 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