2012-01-21 61 views
0

我有一個存儲網址的JavaScript變量。我必須將該URL發送到後端以執行一些操作,並且由於URL可能包含特殊字符,因此我將其轉換爲十六進制以避免問題。後端代碼不是我的,我什至不能看到代碼。後端正在使用哪種字符編碼?

編碼工作得很好,當我採用IPS嘗試,例如,如果我想在JavaScript發送「192.168.1.1」我把它編碼爲「3139322e3136382e312e31」和後端明白它完美。

問題出現在我嘗試使用域時,後端預期和我發送的內容不匹配。如果我想在JavaScript中發送'cstmal',我將它編碼爲'6373746d616c',但服務器等待'7066677A6e79'。

有什麼不對?我看了很多,但我找不到答案。

我用編碼的代碼是:

function encode(str) { 
    var result = ""; 
    for (var i = 0; i < str.length; i++) { 
     result += str.charCodeAt(i).toString(16); 
    } 
    return result; 
} 

總之,你知道是什麼角色轉換給出了這樣的結果:

C = 70
S = 66
T = 67
m = 7A
a = 6E
l = 79

謝謝!

+0

你怎麼知道服務器「等待」什麼?我嚴重懷疑這是你認爲它是編碼的字符的實際編碼。 – Pointy

+0

當我進行創建操作時,將在BD中創建鏈接並轉換域。在那裏我看到他們在做什麼。 –

回答

0

聽起來很奇怪,數據似乎是rot-13編碼的。例如,cstmal變成rot-13中的pfgzny,並且當您用Ascii代碼將字符替換爲兩個十六進制數字時,將得到7066677A6e79。 JavaScript實現很簡單,但請參閱4umi Rot13

0

AFAIK大多數編碼對於字母數字字符(1-128範圍)使用相同的代碼,所以如果它適用於數字,它也應該適用於a-z字符。如果您知道每個字母代碼服務器返回的代碼,則可以構建自己的映射,如創建對象{'c': '70', 's': '66', ...}並將其用於編碼字符串。

+0

這不是一個好的解決方案,但對我來說是最好的解決方案。非常感謝這個想法。 –

相關問題