当前位置: 首页 > 知识库问答 >
问题:

UTF-8到可读字符[重复]

阚砚文
2023-03-14

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

原始字符串如下:

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

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

VUVkSksxbFlVV2RrUjJoc1NVZFdkVnBEUW5aYWFuZDJXV28wWnpSdllWTkpSMFp6U1VoVVJIRllTblJoVnpWMlNVZFNiRWxQUzBGdmFVSnJXbGhPZDJSalQzQmplVUpyV2xSNGQxQm5QVDA9

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

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

UTF-8字符显示不正确。我应该使用什么功能来修复这个问题?

共有2个答案

唐泳
2023-03-14

这样做的结果是JavaScript不允许Latin1范围之外的字符执行,您可以执行以下操作:

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

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

邢同
2023-03-14

尝试

let decodedString = decodeURIComponent(escape(window.atob(yourString)))
 类似资料:
  • 我的记事本是用Java JTextPane构建的,在写英语时工作得非常好。然而,用其他语言书写的字母,在我的孟加拉文中,显示的是空方块。我如何解决这个问题?

  • 如果UTF-8是8位,不意味着最多只能有256个不同的字符吗? 前128个代码点与ASCII中的相同。但是它说UTF-8可以支持多达百万个字符? 这是怎么回事?

  • 问题内容: 如何使用Android解码utf-8字符串?我尝试使用此命令,但输出与输入相同: 问题答案: 字符串不需要编码。它只是一个Unicode字符序列。 要将字符串转换为字节序列时需要进行 编码 。您选择的字符集(UTF-8,cp1255等)确定了Character-> Byte映射。请注意,字符不必转换为单个字节。在大多数字符集中,大多数Unicode字符都转换为至少两个字节。 字符串的编

  • 问题内容: 我正在从外部服务器加载HTML。HTML标记具有UTF-8编码,并包含ľ,š,č,ť,ž等字符。当我使用file_get_contents()加载HTML时,如下所示: 它弄乱了UTF-8字符并加载了Å,¾,¤和类似的废话,而不是正确的UTF-8字符。 我该如何解决? 更新: 我尝试将HTML保存到文件中并以UTF-8编码输出。两者都不起作用,所以这意味着file_get_conten

  • 问题内容: 因此,我有一个字符串数组,所有字符串都使用系统默认的 ANSI 编码,并从SQL数据库中提取。因此,存在256个不同的可能字符字节值(单字节编码)。 有没有一种方法可以使我工作并显示这些字符,而不必在我的所有字符串上使用并最终得到类似的东西? 还是这是JSON的标准? 问题答案: 有没有一种方法可以使json_encode()工作并显示这些字符,而不必在所有字符串上都使用utf8_en

  • 问题内容: 我有一个准备好的声明: 在我的代码中,我尝试使用st.setString方法。 userName的值为şakça。setString方法将’şakça’更改为’?akça’。它不能识别UTF-8字符。我怎么解决这个问题? 谢谢。 问题答案: 实际上,解决这些问题的方法数量非常可观。如果您使用的是MySQL,请尝试在JDBC连接URL的末尾添加一个参数: 您还应该检查表/列字符集是否为U