2016-02-04 5 views
0

Я был программистом на Python (конечно, я тоже сейчас), поэтому я знаком с кодировкой и расшифровкой Python.
Как можно дважды закодировать строку?

Я был удивлен тем фактом, что Java может кодировать переменные String дважды подряд.

Это пример кода:

import java.net.URLEncoder; 

public class OpenAPITest { 
    public static void main(String[] arg) throws Exception { 
     String str = "안녕"; // Korean 
     String utfStr = URLEncoder.encode(str, "UTF-8"); 
     System.out.println(utfStr); 
     String ms949Str = URLEncoder.encode(utfStr, "MS949"); 
     System.out.println(ms949Str); 
    } 
} 

Интересно, как он может кодировать строки в два раза раза.

В Python, версии 3.х, как только вы закодировать type 'str', который состоит из Юникода строки, то она преобразуется в type 'byte', который состоит из байтов строки. type 'byte' имеет только decode() функция.

Кроме того, я хочу получить одинаковые значения String в Python3 в качестве значения результата ms949Str в моем примере кода. Дайте мне несколько советов, пожалуйста. Благодарю.

+1

Что ваш вопрос ? – scottb

+0

@scottb Как можно дважды закодировать String в JAVA? – user3595632

+0

Sidenote: «дважды» означает «два раза». Поэтому «дважды» избыточно –

ответ

2

Не знаю Python, кроме того, вы не сказали, какой метод Python вы использовали в любом случае, но если метод Python преобразовал строку Python в последовательность байтов UTF-8, то вы используете неправильный метод преобразования здесь , потому что это не имеет никакого отношения к URL Кодировка.

str.getBytes("UTF-8") вернет byte[] со строкой Java, закодированной в UTF-8.

new String(bytes, "UTF-8") будет декодировать массив байтов.


URL Кодирование о преобразовании текста в строку, которая действует в качестве компонента полного URL, а это означает, что все специальные символы должны быть закодированы с использованием %NN побегов. Символы, отличные от ASCII, также должны быть закодированы.

В качестве примера возьмите строку Test & gehört. Когда URL кодировкой, он становится следующим строки:

Test+%26+geh%C3%B6rt 

Строка Test & gehört становится следующая последовательность байт (отображается в шестнадцатеричном виде) при использовании getBytes:

54 65 73 74 20 26 20 67 65 68 c3 b6 72 74 
+0

Не знаю Java, но какая разница между 'str.getBytes ('utf-8')' и 'URLEncoder.encode (str," UTF-8 ")'?. Я думаю, что обе функции преобразуют строку в значение 'utf-8' закодированных байтов, правильно? – user3595632

+0

вы также можете использовать класс Base64 от apache для кодирования строки. – Musaddique

+0

@ user3595632 URL-кодирование делает много * больше *, что только кодировка UTF-8. Он избегает символов, которые имеют особое значение для ** URL **. Если вы специально не создаете URL-адрес по одному компоненту за раз, URL-код кодирования * не * для вас.URL-адрес «encoding»/escaping аналогичен кодированию/экранированию XML, где специальные символы, такие как '&', кодируются как «&». В кодировке URL, которая получает кодировку как% 26, как вы можете видеть в ответе. Эти кодировки не имеют отношения к UTF-8. – Andreas

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