整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          如何實現(xiàn)注入html的中文不顯示亂碼?

          景說明

          假設(shè)需要劫持http響應(yīng)并在html頁面中注入一段js代碼后再傳回瀏覽器,實現(xiàn)在瀏覽器出現(xiàn)一個彈框消息提醒。

          由于原始html頁面編碼格式存在UTF-8、GBK等多種編碼格式,如果注入的js包含中文消息的話,那么在UTF-8或GBK編碼的頁面就會有一個出現(xiàn)亂碼。有沒有辦法做到不管是針對GBK、UTF-8編碼的頁面都能做到正常顯示而不會出現(xiàn)亂碼哪?

          產(chǎn)生亂碼的原因

          首先來分析一下產(chǎn)生亂碼的原因,我們在瀏覽器看到的信息都是通過圖形學(xué)手段在顯示器上呈現(xiàn)出來的,而實際保存在計算機硬件上的都是0和1(因為計算機實現(xiàn)是基于二進制),那么計算機要顯示、傳遞信息就需要依靠一套規(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"中文"

          注意:

          1. 注入的js代碼仍然是utf-8編碼格式,只是消息內(nèi)容轉(zhuǎn)換為unicode編碼的形式;
          2. unicode中0x4e2d表示的0/1串對應(yīng)漢字"中",0x6587對應(yīng)的0/1串對應(yīng)漢字"文";
          3. message其實也不是真正的unicode編碼,它只是普通的字符串,只是使用了unicode對應(yīng)的碼點(也就是二進制對應(yīng)的數(shù)值),因為可以利用這個碼點在瀏覽器中恢復(fù)出正確的字符,事實上unicode字符集并沒有規(guī)定具體的編碼格式。

          web開發(fā)中我們一般都會不可避免的使用js。我們可以將js代碼直接放在頁面中即通過內(nèi)部使用js。但是為了給頁面良好的"瘦身"我們一般都會將js代碼放在外部,然后通過src引用。這個時候我們就需要注意一個問題:編碼問題。如果web頁面也js采用不同編碼,這個時候就會出現(xiàn)亂碼。(內(nèi)部使用js不需要注意編碼問題,因為他們采用的是同一種編碼)

          對于大多數(shù)的web頁面,我們一般都是使用如下兩種編碼:UTF-8、GB2312。所以我們只需要同意頁面和js編碼就可以解決亂碼問題:

          對于GBK頁面引用編碼為UTF-8編碼的JavaScript文件如果出現(xiàn)亂碼問題,可以使用下面的代碼來解決

          復(fù)制代碼 代碼如下:

          <script type=”text/javascript” src=”test.js” charset=”utf-8″></script>

          同樣在UTF-8頁面中引入編碼為GBK的JavaScript文件亂碼問題了,可以使用如下方式:

          復(fù)制代碼 代碼如下:

          <script type=”text/javascript” src=”test.js” charset=”gb2312″></script>

          此方法是對于在js文件中出現(xiàn)漢字中文,以及其他容易造成在GBK與UTF-8編碼錯誤字符的時候使用,對于純英文的就不需要了。如果為了保險,加上也可以....

          幾天有OMI的用戶反映,安裝OMI時有中文亂碼現(xiàn)象,我還說不可能。我們的程序在windows,linux都部署過無數(shù)次了,開發(fā)時都是UTF8編碼的,咋還會亂碼呢。結(jié)果看了半天也沒看出個啥,還是沒解決。

          最近新安裝程序時,新下載了一個tomcat8.5的版本,一跑程序還真是html頁亂碼了,但JSP頁沒事。因為之前我們的程序都是跑在tomcat7,最高是tomcat8.0,沒試過更高的,高版本確實有問題,且控制臺中文也是亂碼。

          一、嘗試了一些網(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實戰(zhàn)。


          主站蜘蛛池模板: 伊人色综合网一区二区三区 | 日韩三级一区二区| 麻豆AV一区二区三区久久| 日韩免费一区二区三区在线| 国产一区麻豆剧传媒果冻精品| 精品人妻无码一区二区三区蜜桃一 | 日韩在线视频一区| 亚洲国产精品无码第一区二区三区 | 亚洲一区无码中文字幕乱码| 国产AV一区二区精品凹凸| 高清精品一区二区三区一区| 精品三级AV无码一区| 国产成人无码一区二区在线播放 | 亚洲综合一区二区| 国产一区二区三区久久精品| 国产凹凸在线一区二区| 真实国产乱子伦精品一区二区三区 | 精品久久久久一区二区三区| 午夜无码一区二区三区在线观看 | 天堂Aⅴ无码一区二区三区| 痴汉中文字幕视频一区| 一区二区三区杨幂在线观看| 老湿机一区午夜精品免费福利| 国产一国产一区秋霞在线观看| 国产色欲AV一区二区三区| 日韩精品国产一区| 视频在线观看一区二区三区| 搜日本一区二区三区免费高清视频 | 精品亚洲AV无码一区二区三区| 久久精品一区二区三区资源网 | 无码精品人妻一区二区三区影院 | 人妻少妇AV无码一区二区| 国产丝袜无码一区二区三区视频 | 亚洲av成人一区二区三区在线播放| 亚欧在线精品免费观看一区| 日本一区二区三区不卡视频 | 国产成人一区二区三区视频免费| 日韩精品视频一区二区三区| 日韩一区二区a片免费观看| 国产一区二区三区在线观看免费| aⅴ一区二区三区无卡无码|