我正在制作一个javascript应用程序,该应用程序.json
使用jquery 检索文件并将数据注入到其所嵌入的网页中。
这些.json
文件使用UTF-8编码,并包含重音字符,例如é,ö和å。
问题是我无法控制将要使用该应用程序的页面上的字符集。
有些将使用UTF-8,但其他一些将使用iso-8859-1字符集。这当然会使.json
文件中的特殊字符乱码。
如何使用JavaScript将特殊的UTF-8字符转换为等效的iso-8859-1?
实际上,所有内容通常都在内部以某种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;
}
问题内容: 我正在阅读XML文档(UTF-8),并最终使用ISO-8859-1在网页上显示内容。正如预期的那样,有几个字符显示不正确,比如,和(他们显示为?)。 是否可以将这些字符从UTF-8转换为ISO-8859-1? 这是我编写的尝试此功能的代码段: 我不太确定发生了什么问题,但是我认为是readLine()引起了麻烦(因为字符串将是Java / UTF-16编码的?)。我尝试的另一种变化
问题内容: 我正在尝试将UTF-8中Java编码的字符串转换为ISO-8859-1。例如,在字符串“âabcd”中,“â”在ISO-8859-1中表示为E2。在UTF-8中,它表示为两个字节。C3 A2我相信。当我执行getbytes(encoding),然后使用ISO-8859-1编码的字节创建一个新字符串时,我得到两个不同的字符。â。还有其他方法可以使字符保持一致,即abcd吗? 问题答案:
问题内容: 有谁知道如何将字符串从ISO-8859-1转换为UTF-8并重新转换为Java? 我从网络上获取一个字符串并将其保存在RMS(J2ME)中,但是我想保留特殊字符并从RMS中获取字符串,但要使用ISO-8859-1编码。我该怎么做呢? 问题答案: 通常,你无法执行此操作。UTF-8能够编码任何Unicode代码点。ISO-8859-1只能处理其中的一小部分。因此,从ISO-8859-1转
问题内容: 有人知道如何将特殊字符转换为in 吗? 例: (“&”号)变为。 (双引号)成为时未设置。 (单引号)仅在被设置时才变为。 (小于)变为。 (大于)变为。 问题答案: 您需要一个功能类似于 但是要考虑到您希望对单/双引号进行不同处理的愿望。
问题内容: 我有一个FTP客户端类,它返回指向该文件的InputStream。我想用BufferedReader逐行读取文件。问题是,客户端以二进制模式返回文件,并且文件具有ISO-8859-15编码。 问题答案: 如果文件/流/任何内容真正包含ISO-8859-15编码的文本,则只需在创建InputStreamReader时指定它: 然后,将以Java的本机编码(为UTF-16,而不是UTF-8
问题内容: 是否有任何库可以将特殊字符替换为ASCII等效项,例如: 至: 我当然可以创建地图: 并使用一些替换功能。但是我不想将所有等效项硬编码到我的程序中,如果已经有一些功能可以做到这一点。 问题答案: