一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

中文亂碼的總結(jié)

  在開發(fā)中,總會(huì)碰到各種中文亂碼問(wèn)題,下面稍作總結(jié)。

  1、數(shù)據(jù)庫(kù)的亂碼出現(xiàn)亂碼問(wèn)題,我們第一反應(yīng)應(yīng)該是:是否數(shù)據(jù)庫(kù)字符編碼設(shè)置有問(wèn)題。以mysql為例,裝好mysql后進(jìn)入安裝目錄,打開my.ini配置文件查看mysql設(shè)置的編碼。在my.ini中有兩處設(shè)置字符編碼的地方,分別是[mysql]下的default-character-set及[mysqld]下的default-character-set。熟悉linux的朋友都知道以d結(jié)尾的表示服務(wù)端,如你想那樣,[mysql]設(shè)置的字符編碼是客戶端的,[mysqld]設(shè)置的字符編碼是mysql服務(wù)器端的編碼。我們的數(shù)據(jù)就是存儲(chǔ)在mysql服務(wù)器端的,為了能存下任何字符編碼的數(shù)據(jù),我們一般設(shè)置[mysqld]下的default-character-set=utf8(注意,不是utf-8)。代表客戶端的[mysql]下的default-character-set應(yīng)該怎么設(shè)置呢,一般朋友可能也設(shè)置成utf8,這可能會(huì)出問(wèn)題的。如果這樣設(shè)置的話,當(dāng)我們"運(yùn)行cmd"打開DOS窗口,通過(guò)"mysql -uroot -p123"命令進(jìn)入mysql的客戶端后,我們是不能插入中文的。道理很簡(jiǎn)單,這是因?yàn)槲覀兊牟僮飨到y(tǒng)的字符編碼是GBK(或GBK兼容),我們?cè)贒OS窗口輸入的中文(如:insert into test values('中文'))自然也是GBK的,而我們[mysql]設(shè)置的卻是utf8,因?yàn)椴患嫒菟詴?huì)出錯(cuò)。當(dāng)然,如果我們使用相關(guān)mysql的GUI客戶端工具,進(jìn)行相關(guān)設(shè)置,即使[mysql]設(shè)置成utf8也沒問(wèn)題。但如果通過(guò)DOS窗口登陸mysql客戶端時(shí),一般要設(shè)置[mysql]下的default-character-set=GBK。

  總結(jié):[mysql]下default-character-set=GBK,[mysqld]下default-character-set=utf8 

  2、使用GET請(qǐng)求的亂碼如果一個(gè)請(qǐng)求是GET方式時(shí),比如<a href="url">標(biāo)簽指定的請(qǐng)求如form表單以GET方式提交,我們可以在瀏覽器地址欄上看到類似http://localhost/proj/a.do?title=%C4%E3%BA%C3 這樣的URL。像這樣2個(gè)(%加上2位16進(jìn)制數(shù))表示一個(gè)中文,這是用ISO8859-1(即lantin1)進(jìn)行的編碼。對(duì)于這樣用GET請(qǐng)求的URL中的中文字符,我們是不能通過(guò)設(shè)置request.setCharacterEncoding("UTF-8")來(lái)解決的。

  解決方法有兩種:

  第一種方法是用 title = new String(title.getBytes("ISO8859-1"),"UTF-8");  來(lái)對(duì)每個(gè)有中文的請(qǐng)求參數(shù)進(jìn)行解碼再編碼,這種方法比較繁瑣;

  第二種方法是修改tomcat的server.xml配置文件,把<Connector port="8080"...>修改成<Connector port="8080"... URLEncoding="UTF-8">,即在<Connector>元素中指定其URLEncoding="UTF-8",其默認(rèn)值為lantin1。這屬性指定了URL的編碼,設(shè)置成UTF-8后,地址欄上就不會(huì)再出現(xiàn) a.do?title=%C4%E3%BA%C3 之類的內(nèi)容了,而是 a.do?title=中文。這種方法的缺點(diǎn)是,其它項(xiàng)目或該項(xiàng)目其它地方可能會(huì)因?yàn)樾薷亩肓诵碌闹形木幋a問(wèn)題,比如使用這種方法之后,有些地方使用了第一種方法處理好了的中文將會(huì)再次變成亂碼。這種方法不常用,可能牽一發(fā)而動(dòng)全身。 

  3、使用POST請(qǐng)求的亂碼對(duì)于form表單以POST提交的請(qǐng)求,可以用request.setCharacterEncoding("UTF-8")來(lái)解決。至于為什么這種方法對(duì)POST請(qǐng)求有效而對(duì)GET請(qǐng)求無(wú)效,請(qǐng)參考HTTP協(xié)議中GET與POST請(qǐng)求的差別,簡(jiǎn)單來(lái)講就是GET請(qǐng)求的內(nèi)容放在請(qǐng)求頭里,POST請(qǐng)求是放在請(qǐng)求體來(lái)。一般來(lái)講我們可以通過(guò)給項(xiàng)目增加一個(gè)字符集過(guò)濾器來(lái)一次性解決POST請(qǐng)求的中文亂碼。過(guò)濾器里的內(nèi)容非常簡(jiǎn)單,就是調(diào)用request.setCharacterEncoding(encoding),encoding是我們要設(shè)置的字符集。過(guò)濾器可以自己編寫,也可以使用spring提供的org.springframework.web.filter.CharacterEncodingFilter。  

  綜上所述我們?cè)谥形膩y碼這個(gè)問(wèn)題上,一般的做法如下: 

  1、編碼集用UTF-8而不是GBK 

  2、給我們的應(yīng)用加上一個(gè)字符集過(guò)濾器 

  3、所有的Form表單都以POST進(jìn)行提交 

  4、用鏈接<a href="a.do?name=中文">進(jìn)行的提交,最好用new String(title.getBytes("ISO8859-1"),"UTF-8")來(lái)解決而不是修改tomcat的配置文件

it知識(shí)庫(kù)中文亂碼的總結(jié),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 免费啪视频观在线视频在线 | 91精品在线看 | 色成年激情久久综合 | 99久久精品免费看国产高清 | 亚洲永久免费 | 亚洲制服欧美自拍另类 | 5151四虎永久在线精品免费 | 亚洲欧美在线综合一区二区三区 | 激情六月天婷婷 | 婷婷亚洲视频 | 亚洲影视久久 | 国产精品高清一区二区 | 久久久亚洲精品国产 | 爽爽影院色黄网站在线观看 | 国产麻豆91在线 | 欧美日韩激情 | 国产精品系列在线观看 | 九九99re在线视频精品免费 | 精品在线观看一区 | 一级毛片成人免费看免费不卡 | 99在线观看巨臀大臀视频 | 五月丁香六月综合缴清无码 | 午夜国产精品福利在线观看 | 久久久久国产视频 | 在线观看91精品国产剧情免费 | 国产级a爱做片免费观看 | 一区二区三区伦理高清 | 亚洲一区免费观看 | 国语自产免费精品视频一区二区 | 伊人久久综在合线亚洲91 | 国产精品青青青高清在线密亚 | 亚洲国产精品线播放 | 成人在线视频国产 | 欧美激情一区 | 婷婷开心综合 | 精品一区二区三区免费观看 | 欧美 亚洲 综合 卡通 另类 区 | 91网站网址最新 | 欧美视频亚洲 | 国产网红在线观看 | 色哟哟www视频在线观看高清 |