2013-09-06 2 views
4

Я пытался написать метод JavaScript, который escapes Японские символы.Выпадение и декодирование японских символов в JS

var esc_str=escape("チャイナモバイル•リミテッド"); 
var dec_str=decodeURIComponent(esc_str); 
//%u30C1%u30E3%u30A4%u30CA%u30E2%u30D0%u30A4%u30EB%u2022%u30EA%u30DF%u30C6%u30C3%u30C9 is dec_str as per debugger- console log. 
console.log(dec_str); 

Хотя decoding, я получаю следующее сообщение об ошибке:

Uncaught URIError: URI malformed

Как мы избегаем японские символы, чтобы расшифровать его обратно правильно?

Любая помощь приветствуется!

http://jsfiddle.net/hcU9C/

ответ

5

Страница, которую вы связаны говорит

Note: The escape() function should not be used to encode URIs. Use the encodeURI() function instead.

И это, кажется, работает:

encodeURIComponent("チャイナモバイル•リミテッド"); 
"%E3%83%81%E3%83%A3%E3%82%A4%E3%83%8A%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB%E2%80%A2%E3%83%AA%E3%83%9F%E3%83%86%E3%83%83%E3%83%89" 

decodeURIComponent("%E3%83%81%E3%83%A3%E3%82%A4%E3%83%8A%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB%E2%80%A2%E3%83%AA%E3%83%9F%E3%83%86%E3%83%83%E3%83%89") 
"チャイナモバイル•リミテッド" 
+1

Почему encodeURI и не encodeURIComponent? – nhahtdh

+0

encodeURIComponent также будет работать здесь. Какой из них использовать, зависит от того, должны ли быть закодированы какие-либо символы &, = и тому подобное. – Thilo

+1

Я прошу, потому что вы кодируете с encodeURI и декодируете с decodeURIComponent. Странно, как вы используете 2 функции, которые не прямо противоположны друг другу. – nhahtdh

2

Вы должны идеально использовать encodeURI или encodeURIComponent для кодирования строк и decodeURI или decodeURIComponent соответственно для декодирования строки как escape & unescape устарели.

Еще раз, если вы хотите использовать escape для кодирования, используйте функцию unescape вместо функции decodeURIComponent для декодирования строки.

С MDN страницы

The escape and unescape functions do not work properly for non-ASCII characters and have been deprecated. In JavaScript 1.5 and later, use encodeURI, decodeURI, encodeURIComponent, and decodeURIComponent.

The escape and unescape functions let you encode and decode strings. The escape function returns the hexadecimal encoding of an argument in the ISO Latin character set. The unescape function returns the ASCII string for the specified hexadecimal encoding value.

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