4

我试图编写一个转义日文字符的 JavaScript 方法。

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);

解码时,我收到以下错误:

未捕获的 URIError:URI 格式错误

我们如何转义日文字符,以正确解码?

任何帮助表示赞赏!

http://jsfiddle.net/hcU9C/

4

2 回答 2

5

您链接到的页面说

注意:escape() 函数不应用于对 URI 进行编码。请改用 encodeURI() 函数。

这似乎有效:

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")
"チャイナモバイル•リミテッド"
于 2013-09-06T10:59:31.617 回答
2

理想情况下,您应该使用encodeURIorencodeURIComponent对字符串进行编码,decodeURI或者decodeURIComponent分别将字符串解码为escape&unescape已被弃用。

不过,如果您希望escape用于编码,请使用unescape函数而不是decodeURIComponent函数来解码字符串。

MDN页面,

escape 和 unescape 函数不适用于非 ASCII 字符,已被弃用。在 JavaScript 1.5 及更高版本中,使用 encodeURI、decodeURI、encodeURIComponent 和 decodeURIComponent。

escape 和 unescape 函数可让您对字符串进行编码和解码。转义函数返回 ISO 拉丁字符集中参数的十六进制编码。unescape 函数返回指定十六进制编码值的 ASCII 字符串。

于 2013-09-06T11:06:04.013 回答