我工作在我的android項目&我有一個奇特的問題,讓我發瘋。我試圖將字符串轉換爲Utf-16或Utf-8。 我使用這段代碼來實現它,但它給了我一個負面成員的數組!解碼UTF問題?
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#製作的網絡應用程序&它必須迴應我的客戶。
問題:當我將這些單詞發送到服務器時,它在「????」流上工作,而不是正確的詞。我嘗試了很多方法來解決這個問題,但他們無法解決這個問題。之後,我決定將自己的字符串發送到服務器,並將其轉換爲正確的單詞。所以我選擇了我在帖子頂部描述的那些方法。
我的原始碼是否可靠?
是的。如果我使用英文字符,它的反應非常好。
我的原始代碼是什麼?
的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());
}
*你覺得呢?你有什麼想法嗎?**
你處理UTF8/16字符的字節表示。對於您的語言,您將使用hi-bit設置字節,這意味着它們將被視爲負數,因爲它們被用作有符號整數。 –
您是否嘗試在'Tag'上使用[URLEncoder](http://docs.oracle.com/javase/7/docs/api/java/net/URLEncoder.html)? –
'+ value'幾乎是構建URL /查詢字符串的有效方法。這裏是C#解決方案http://stackoverflow.com/questions/829080/how-to-build-a-query-string-for-a-url-in-c並且應該有等效的Java解決方案 - http:// stackoverflow .com/questions/5330104/encoding-url-query-parameters-in-java ...但這些都不涉及你提問的方式,所以不能回答... –