【问题标题】:UTF-8 to readable characters [duplicate]UTF-8 到可读字符 [重复]
【发布时间】:2019-01-09 15:02:46
【问题描述】:

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

原字符串如下:

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 字符显示不正确。我应该使用什么函数来解决这个问题?

【问题讨论】:

  • 拜托,看看这个conversation,我猜你的问题是重复的。
  • 你为什么要对某些东西进行 3 次 base64 编码?

标签: javascript


【解决方案1】:

试试

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

【讨论】:

  • 非常感谢。这解决了问题。
【解决方案2】:

发生的情况是 JavaScript 不允许超出 Latin1 范围的字符,为了能够执行它,您可以执行以下操作:

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

这段代码将(从javascript)正确地将字符串转换为base64,并且从PHP你可以很好地解码它,现在的问题是JavaScript将无法解码它,因为它将它解释为语法错误(尽管它已被编码),所以它也不适合你。

【讨论】:

  • 谢谢乔尔。编码是PHP,只有解码是JS。
猜你喜欢
  • 1970-01-01
  • 2015-05-17
  • 2019-08-08
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
相关资源
最近更新 更多