gpt4 book ai didi

java - 解码UTF问题?

转载 作者:搜寻专家 更新时间:2023-10-31 20:10:46 24 4
gpt4 key购买 nike

我正在开发我的 android 项目,我遇到了一个让我发疯的奇异问题。我正在尝试将字符串转换为 Utf-16Utf-8。我使用这段代码来实现它,但它给了我一个包含一些负数成员的数组!

Java 代码:

String Tag="سیر";
String Value="";
try{
byte[] bytes = Tag.getBytes("UTF-16");
for(int i=0;i<bytes.length;i++){
Value=Value+String.valueOf(bytes[i])+",";
}

数组成员:数组成员是 [-1,-2,51,6,-52,6,49,6]。我检查了 UTF-16 的 表。它没有任何负数,而且我使用了一个将单词转换为 UTF-16M 的网站。它给了我 "0633 06CC 0631"HEX。如果将此数字更改为十进制,您将看到:"1577 1740 1585"。如您所见,这里没有负数!所以我的第一个问题是这些负数是多少?!

为什么要将单词转换为 UTF-8 或 UTF-16?

我正在做一个项目。这个项目有两个部分。第一部分是一个 android 应用程序,它向服务器发送关键字。这些话是由客户发送的。我的客户使用(波斯语,فارسی)字符。第二部分是由 C# 制作的 Web 应用程序,它必须响应我的客户。

问题:当我将这些词发送到服务器时,它会处理“????”流而不是正确的词。我已经尝试了很多方法来解决这个问题,但他们无法解决。之后我决定自己将字符串的 utf-16utf-8 发送到服务器并将其转换为正确的单词。所以我选择了我在帖子顶部描述的那些方法。

我的原始代码可靠吗?

是的。如果我使用英文字符,它会很好地响应。

我的原始代码是什么?

向服务器发送参数的 Java 代码:

    protected String doInBackground(String...Urls){
String Data="";
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;
}
}

响应客户端的 C# 代码:

    string Tag = Request.QueryString["Tag"].ToString();
SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["conStr"].ToString();
SqlCommand cmd = new SqlCommand("FetchResaultByTag");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@NewsTag",Tag);
cmd.Connection = con;
SqlDataReader DR;
String Txt = "";
try
{
con.Open();
DR = cmd.ExecuteReader();
while (DR.Read())
{
Txt = Txt + DR.GetString(0) + "-" + DR.GetString(1) + "-" + DR.GetString(2) + "-" + DR.GetString(3) + "/";
}
//Response.Write(Txt);
con.Close();
}
catch (Exception ex)
{
con.Close();
Response.Write(ex.ToString());
}

*你怎么看?你有什么想法吗?**

最佳答案

我解决了。起初我更改了我的 java 代码。我通过使用 URLEncoder 类将我的字符串转换为 UTF-8。

新的java代码:

try{
Tag=URLEncoder.encode(Tag,"UTF-8");
}
catch(Exception ex){
Log.d("Er>encodeing-Problem",ex.toString());
}

之后我通过 Http 协议(protocol)将它作为查询字符串发送

protected String doInBackground(String...Urls){
String Data="";
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;
}

最后我进入了服务器并对其进行了解码。

新的 C# 代码:

     string Tag = Request.QueryString["Tag"].ToString();
SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["conStr"].ToString());
SqlCommand cmd = new SqlCommand("FetchResaultByTag");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@NewsTag", HttpUtility.UrlDecode(Tag));
cmd.Connection = con;
SqlDataReader DR;
String Txt = "";
try
{
con.Open();
DR = cmd.ExecuteReader();
while (DR.Read())
{
Txt = Txt + DR.GetString(0) + "-" + DR.GetString(1) + "-" + DR.GetString(2) + "-" + DR.GetString(3) + "/";
}
Response.Write(Txt);
con.Close();
}
catch (Exception ex)
{
con.Close();
Response.Write(ex.ToString());
}

关于java - 解码UTF问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30111820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com