在Android中解码字符



我正在从事我的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

最新更新