为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用JavaScript将特殊的UTF-8字符转换为等效的iso-8859-1?

如何使用JavaScript将特殊的UTF-8字符转换为等效的iso-8859-1?

慕丝7291255 2019-12-20 10:59:27
我正在制作一个JavaScript应用程序,该应用程序.json使用jquery 检索文件,并将数据注入到其所嵌入的网页中。这些.json文件使用UTF-8编码,并包含重音字符,例如é,ö和å。问题是我无法控制将要使用该应用程序的页面上的字符集。有些将使用UTF-8,但其他一些将使用iso-8859-1字符集。这当然会使.json文件中的特殊字符乱码。如何使用JavaScript将特殊的UTF-8字符转换为等效的iso-8859-1?
查看完整描述

3 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

实际上,所有内容通常都在内部以某种Unicode形式存储,但不要赘述。我假设您正在使用标志性的“åäö”类型字符串,因为您使用的是ISO-8859作为字符编码。您可以采取一种技巧来转换这些字符。用于编码和解码查询字符串的escape和unescape函数是为ISO字符定义的,而较新的encodeURIComponent和decodeURIComponent功能相同的函数是为UTF8字符定义的。


escape将扩展的ISO-8859-1字符(UTF代码点U + 0080-U + 00ff)%xx编码为(两位十六进制),而将UTF代码点U + 0100及更高版本编码为%uxxxx(%u后跟四位十六进制。)例如,escape("å") == "%E5"和escape("あ") == "%u3042"。


encodeURIComponent将扩展字符百分比编码为UTF8字节序列。例如encodeURIComponent("å") == "%C3%A5"和encodeURIComponent("あ") == "%E3%81%82"。


因此,您可以执行以下操作:


fixedstring = decodeURIComponent(escape(utfstring));

例如,错误编码的字符“å”变成“Ã¥”。该命令执行的操作escape("Ã¥") == "%C3%A5"是将两个错误的ISO字符编码为单个字节。然后decodeURIComponent("%C3%A5") == "å",将两个百分比编码的字节解释为UTF8序列。


如果您出于某种原因需要做相反的事情,那也可以:


utfstring = unescape(encodeURIComponent(originalstring));

有没有办法区分错误的UTF8字符串和ISO字符串?原来有。如果给定格式错误的编码序列,则上面使用的encodeURIComponent函数将引发错误。我们可以使用它来很有可能检测我们的字符串是UTF8还是ISO。


var fixedstring;


try{

    // If the string is UTF-8, this will work and not throw an error.

    fixedstring=decodeURIComponent(escape(badstring));

}catch(e){

    // If it isn't, an error will be thrown, and we can assume that we have an ISO string.

    fixedstring=badstring;

}


查看完整回答
反对 回复 2019-12-20
?
守着一只汪

TA贡献1872条经验 获得超3个赞

问题在于,一旦页面被提供,内容将采用内容类型元标记中描述的编码。“错误”编码中的内容已出现乱码。


在提供页面之前,最好在服务器上执行此操作。或正如我所知道的说:UTF-8端到端或死亡。


查看完整回答
反对 回复 2019-12-20
  • 3 回答
  • 0 关注
  • 1412 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信