2011-06-29 95 views
0

我需要使用什麼編碼來編碼字符串document.write('website%40site.com');,以便它看起來像下面的字符串?無法識別字符串編碼

%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65 %66%3D%5C%22%6D%61%69%圖6c%74%1207%3A%63%68%75%圖6d%61%圖6b%73%68%圖6c%69%61%68%40%圖6d %61%69%圖6c%2E%72%75%5℃%22%3E%63%68%75%圖6d%61%圖6b%73%68%圖6c%69%61%68%40%圖6d%61%69 %6c%2e%72%75%3c%5c%2f%61%3e%27%29%3b

回答

1

這是與URL編碼相同的編碼類型,不同之處在於所有字符都是編碼而不是實際需要編碼的編碼。每個字節都被轉換成一個兩位數的十六進制數字,前綴爲%

可以使用UTF-8編碼字符串,然後每個字節轉換爲十六進制代碼:

string encoded = String.Concat(
    Encoding.UTF8.GetBytes("document.write('website%40site.com');") 
    .Select(b => "%" + b.ToString("x2")) 
    .ToArray() 
); 
+0

非常感謝,這就是我所需要的!字符串xxx = string.Empty; (「=」%「+ b.ToString(」x2「))。ToList() .ForEach(d => { xxx + = d; }); –

+0

你怎麼知道它是UTF8而不是ASCII或ISO 8859編碼之一?我無法分辨出這一點。 –

+1

@throbbing salami:不要使用'+ ='在一個循環中連接字符串,我糾正了我的例子使用'String.Concat'。 – Guffa

1

這是ASCII或UTF-8或ASCII的8位超集之一。不可能肯定地說。

最好的辦法是閱讀你試圖傳遞給它的任何函數或程序的文檔。

2

這是正常的ASCII編碼:

%3c%5c%2f%61%3e = <\/a> 

,這是難得一見的ASCII編碼的這個樣子,統一,另一方面是沒有的。