2010-03-30 42 views
1

我想發送英鎊符號字符,即'£'編碼爲ISO-8859-1。 我通過執行以下操作執行此:「英鎊」字符似乎沒有正確編碼 - 期望'%a3'但得到'%u00a3'

var _encoding = Encoding.GetEncoding("iso-8859-1"); 
var _requestContent = _encoding.GetBytes(requestContent); 
var _request = (HttpWebRequest)WebRequest.Create(target); 

_request.Headers[HttpRequestHeader.ContentEncoding] = _encoding.WebName; 
_request.Method = "POST"; 
_request.ContentType = "application/x-www-form-urlencoded; charset=iso-8859-1"; 
_request.ContentLength = _requestContent.Length; 

_requestStream = _request.GetRequestStream(); 
_requestStream.Write(_requestContent, 0, _requestContent.Length); 
_requestStream.Flush(); 
_requestStream.Close(); 

當我把一個斷點在目標,我希望獲得以下信息: 「%A3」,但是我收到「%u00a3」代替。我們測試了很多奇怪的字符,但是'£'似乎是唯一一個出現問題的字符。

有誰知道問題在這裏? - 幫助將不勝感激...

比利

+0

我也不太清楚如何幫助,但OUF好奇,你能不使用utf8編碼?通常很少出現這種問題的錯誤。 – Flukey 2010-03-30 09:00:11

+0

不能使用UTF8作爲我們呼叫的服務器(第三方服務)堅持使用ISO 8859-1 – bstack 2010-03-30 09:19:28

+0

我沒有回答你的問題,但有興趣知道如果你使用Encoding.Default和'windows-1252'作爲編碼(參見http://mindprod.com/jgloss/encoding.html)。 – 2010-03-30 10:31:12

回答

1

從我所看到的,他們是等效的。如果服務器窒息,那麼服務器可能不支持轉義的Unicode。

+0

服務器不窒息,只是'£'符號沒有按預期編碼。收到消息的服務器仍然正常運行。 – bstack 2010-03-30 09:18:22

+1

@ user243143:我無法看到問題:) – leppie 2010-03-30 09:24:36

0

從比特的研究,我發現:

ISO-8859-1被分爲2組字符:(參照http://en.wikipedia.org/wiki/ISO_8859-1

範圍低20至7E - ,其中所有字符似乎被正確編碼 A0到FF的較高範圍 - 其中所有字符似乎都編碼爲它們的Unicode等效值

由於'£'在較高範圍A0到FF中,所以它被編碼爲%u00a3。實際上,當我使用較高範圍A0到FF的前幾個字符即'',''''''''''時,我會得到'%''''''''''' %u00a8%u00a9%u00aa%u00ab%u00ac%u00ae轉移」。這種行爲是一致的。

我現在的問題是爲什麼字符在較高範圍A0到FF被編碼爲Unicode值 - 而不是它們的等效ISO-8859-1值?

%u00a1%u00a2%u00a3%u00a4%u00a5%u00a6%u00a7%u00a8%u00a9%u00aa%u00ab%u00ac +%u00ae轉移

相關問題