亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用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條經驗 獲得超4個贊

問題在于,一旦頁面被提供,內容將采用內容類型元標記中描述的編碼。“錯誤”編碼中的內容已出現亂碼。


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


查看完整回答
反對 回復 2019-12-20
  • 3 回答
  • 0 關注
  • 1451 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號