UTF-8转换为可读字符

时间:2018-08-01 23:16:44

标签: javascript

编码和解码字符串并不像我想的那么容易。

原始字符串如下:

at the end of → al término de • después de

经过PHP base64编码(使用了3次)后,它看起来有所不同:

VUVkSksxbFlVV2RrUjJoc1NVZFdkVnBEUW5aYWFuZDJXV28wWnpSdllWTkpSMFp6U1VoVVJIRllTblJoVnpWMlNVZFNiRWxQUzBGdmFVSnJXbGhPZDJSalQzQmplVUpyV2xSNGQxQm5QVDA9

当尝试使用JS window.atob()解码字符串时,结果是这样的:

at the end of â al término de ⢠después de

UTF-8字符显示不正确。我应该使用什么功能来解决此问题?

2 个答案:

答案 0 :(得分:1)

尝试

let decodedString = decodeURIComponent(escape(window.atob(yourString)))

答案 1 :(得分:0)

发生的情况是JavaScript不允许 Latin1 范围以外的字符执行该操作,您可以执行以下操作:

let str = 'at the end of → at the end of • after';
btoa(unescape(encodeURIComponent(str)))
// output: YXQgdGhlIGVuZCBvZiDihpIgYXQgdGhlIGVuZCBvZiDigKIgYWZ0ZXI=

此代码会将字符串正确地(从javascript)转换为base64,从PHP您可以很好地对其进行解码,现在的问题是JavaScript无法解码它,因为它将其解释为语法错误(尽管已被编码),因此它也对您不起作用。