幾天保存了網(wǎng)絡(luò)上的一個頁面,瀏覽器打開后,發(fā)現(xiàn)是亂碼。如下圖:
亂碼網(wǎng)頁
出現(xiàn)這個問題怎么處理呢?下面幫你解決
頁面html源碼
查看html,看到這里用了國標(biāo)標(biāo)準(zhǔn),看源碼截圖
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
解決方法:
把gb2312改成utf-8即可
修改為utf-8
修改后的結(jié)果,如圖:
修改后的展示
utf-8 這個是國際通用字庫,支持各種不同的語言
gb3212這個是中國的字庫,支持簡體中文和少數(shù)外語+一些符號,文件資源少一點(diǎn)
區(qū)別:utf-8跨平臺兼容性更好,由于它字庫更全所以加載會慢好多
charset屬性是定義HTML文檔的字符編碼格式。
常見的字符編碼有:Unicode、utf-8、gbk、gb2312
其中:
gbk是國家標(biāo)準(zhǔn)的擴(kuò)展版(增加了繁體并包含所有亞洲字符集)
Unicode是國際組織制定的旨在容納全球所有字符的編碼方案,包括字符集、編碼方案等。又稱為萬國碼、統(tǒng)一碼、單一碼
幾天有OMI的用戶反映,安裝OMI時有中文亂碼現(xiàn)象,我還說不可能。我們的程序在windows,linux都部署過無數(shù)次了,開發(fā)時都是UTF8編碼的,咋還會亂碼呢。結(jié)果看了半天也沒看出個啥,還是沒解決。
最近新安裝程序時,新下載了一個tomcat8.5的版本,一跑程序還真是html頁亂碼了,但JSP頁沒事。因?yàn)橹拔覀兊某绦蚨际桥茉趖omcat7,最高是tomcat8.0,沒試過更高的,高版本確實(shí)有問題,且控制臺中文也是亂碼。
一、嘗試了一些網(wǎng)友給的辦法,下面說一下解決方案:
1、tomcat\bin\catalina.bat 中添加,
set JAVA_OPTS=-Xms512m -Xms1024m -XX:MaxPermSize=1024m -Dfile.encoding=UTF-8
我的添加位置如圖
?前面是正好順便設(shè)置了JVM的內(nèi)存,解決問題的主要后面的部分。
2、修改tomcat\conf\server.xml,加入 URIEncoding="UTF-8"
加入如圖位置
?好象是第一步就可以了,保險起見第二步也加上吧 。
二、關(guān)于控制臺亂碼解決辦法:
修改tomcat\conf\logging.properties
#java.util.logging.ConsoleHandler.encoding = UTF-8(GBK)
將UTF-8改為GBK,或者把整行注掉
我是把相關(guān)編碼全注了
以上,如未解決問題可以加QQ群交流,群名:Kettle實(shí)戰(zhàn)。
假設(shè)需要劫持http響應(yīng)并在html頁面中注入一段js代碼后再傳回瀏覽器,實(shí)現(xiàn)在瀏覽器出現(xiàn)一個彈框消息提醒。
由于原始html頁面編碼格式存在UTF-8、GBK等多種編碼格式,如果注入的js包含中文消息的話,那么在UTF-8或GBK編碼的頁面就會有一個出現(xiàn)亂碼。有沒有辦法做到不管是針對GBK、UTF-8編碼的頁面都能做到正常顯示而不會出現(xiàn)亂碼哪?
首先來分析一下產(chǎn)生亂碼的原因,我們在瀏覽器看到的信息都是通過圖形學(xué)手段在顯示器上呈現(xiàn)出來的,而實(shí)際保存在計算機(jī)硬件上的都是0和1(因?yàn)橛嬎銠C(jī)實(shí)現(xiàn)是基于二進(jìn)制),那么計算機(jī)要顯示、傳遞信息就需要依靠一套規(guī)則把一串串的0和1識別為正確的字符,這就是編碼。
例如01000001在ASCII編碼規(guī)則下對應(yīng)字母A。相同的0/1串,不同的編碼解析出的字符一般是不同的,因此如果html頁面按照UTF-8的編碼解析正常,那么按照GBK的編碼解析就會是亂碼了。根據(jù)上面的示意圖,假設(shè)注入的js代碼為utf-8編碼格式,而原始html編碼格式也為UTF-8編碼格式,那么最終注入這部分中的中文就能正常顯示,但是如果原始html為GBK編碼,那注入的這部分js代碼的中文就會顯示亂碼。
有一種unicode統(tǒng)一編碼字符集,目標(biāo)是把所有文字、字符統(tǒng)一編碼,也就是一串0/1組合在unicode字符集下對應(yīng)的字符是唯一的,不會存在歧義。而js是支持解析unicode字符的,那么就可以在注入js中把要顯示的消息統(tǒng)一轉(zhuǎn)換為unicode編碼,瀏覽器端去解析這個unicode編碼,這樣不管原始html是UTF-8還是GBK,都能正常顯示中文。
原始注入js代碼關(guān)于中文字符的部分
// utf-8編碼格式
let message = "中文";
解決亂碼的注入js代碼關(guān)于中文字符的部分
// utf-8編碼格式
let message = "\\u4e2d\\u6587"; // 這個編碼對應(yīng)上面的message"中文"
注意:
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。