2016-06-27 3 views
-1

Я ищу способ равномерного преобразования символов JavaScript в двоичные. Одна из проблем, я столкнулся в том, что я не в состоянии преобразовать строки, используемые в функции экранирования в правильнопреобразование шестнадцатеричных escape-символов в двоичный код

document.write("HI"); ==> HI (case 1) 
document.write("\x48\x49"); ==> HI (case 2) 
document.write(unescape("%48%49")); ==> HI (case 3) 

Случай 1: Преобразование «HI» в двоичную сгенерированные:

0100100001001001 

Случай 2: Преобразование "\ x48 \ x49" в двоичный генерирует:

0100100001001001 

Случай 3: Преобразование "% 48% 49" в двоичный генерирует:

001001010011010000111000001001010011010000111001 

Я понимаю, что происходит в случае 3. он преобразует каждый символ в двоичный код, не понимая, что эти символы представлены в шестнадцатеричном представлении. Мне интересно, есть ли способ сделать случай 3 иметь такое же двоичное представление, как и случай 1, и случай 2 без предварительной обработки?

I.e, есть ли функция в JavaScript, Python или на любом другом языке, которая может понять, что «% 48» - это один символ, представленный в шестнадцатеричном виде и способный преобразовать его в двоичный?

+0

Вы только с помощью Javascript здесь, так почему вы добавили теги Java и Python? Javascript не является Java вообще. Это другой язык. –

+0

Я заинтересован в преобразовании символов в код JavaScript в двоичный код. Что касается процесса преобразования, я открыт для использования любого языка программирования, который способен конвертировать вышеуказанные 3 случая равномерно – user5289027

ответ

0

decodeURIComponent является правильной функцией для этого. Функция decode устарела. Вот пример.

Если вы положили %48%49 на вход и нажали кнопку «Конвертировать», это даст вам второй случай.

var test = document.querySelector("#test"); 
 
var btn = document.querySelector("#btn"); 
 
var result = document.querySelector("#result"); 
 

 
btn.addEventListener("click", function() { 
 
    var value = decodeURIComponent(test.value); 
 
    var resultText = ""; 
 
    
 
    for (i = 0; i < value.length; i++) { 
 
    resultText += value.charCodeAt(i).toString(2); 
 
    } 
 
    
 
    result.innerText = resultText; 
 
});
<input type="text" id="test"> 
 
<button id="btn">Convert</button> 
 

 
<p id="result"></p>

+0

, но это не может правильно обрабатывать регистр 2. Он возвращает 1011100111100011010011100010111001111000110100111001 для «\ x48 \ x49» – user5289027

+0

Да, но это происходит потому, что при вводе '' \ x48 \ x49 "' он преобразуется во время компиляции. Вы можете попробовать это в консоли своего браузера: введите '' \ x48 \ x49 "' и он вернет «HI» без какого-либо другого вызова функции. Этот фрагмент является просто примером того, что вы должны использовать функцию 'decodeURIComponent' для того, чего вы пытаетесь достичь. Если вы хотите получить HI во время выполнения, вы можете использовать функцию eval, но это очень опасно. –

+0

@ user5289027 проверить [Как удалить строку с экранированной обратной косой чертой в python?] (Http://stackoverflow.com/questions/1885181/how-do-i-un-escape-a-backslash-escaped- string-in-python) для второго случая. –

Смежные вопросы