詳談java編碼互轉(zhuǎn)(application/x-www-form-urlencoded)
本質(zhì)上來(lái)說(shuō),java.net.UrlEncoder適用于將 String 轉(zhuǎn)換為 application/x-www-form-urlencoded MIME 格式的靜態(tài)方法 時(shí) ,使用
但!一般情況下,web應(yīng)用中,當(dāng)你的服務(wù)器,頁(yè)面編碼,請(qǐng)求時(shí)編碼都已經(jīng)修改為 utf-8后,依然亂碼時(shí),此時(shí)則應(yīng)試著用下方所寫(xiě)到的方法
使用URLDecoder將所亂碼的數(shù)據(jù)進(jìn)行解碼,
而在此處簡(jiǎn)單說(shuō)一下亂碼的場(chǎng)景和簡(jiǎn)單轉(zhuǎn)換時(shí)的執(zhí)行原理:
首先,form表單提示數(shù)據(jù)時(shí),默認(rèn)Content-type:為 application/x-www-form-urlencoded,
當(dāng)然也可以是:multipart/form-data ,multipart/form-data 一般用做form表單以流的形式提交數(shù)據(jù)時(shí),則設(shè)置,enctype為該form-data形式,
不過(guò)呢,一般情況下,本寶寶桑面 提到了,提交方式為application/x-www-form-urlencoded, 當(dāng) 環(huán)境等等都已經(jīng)配置為統(tǒng)一編碼后,仍然出現(xiàn)漢字
傳到后臺(tái) 被解碼處理的情況時(shí)(也就是所謂的亂碼 ),此時(shí)可以嘗試,該文下面所提到的方法,使用URLDecoder進(jìn)行解碼再轉(zhuǎn)換,然后轉(zhuǎn)換為漢字,
當(dāng)然在使用場(chǎng)景上,其實(shí)還是有很多情況下需要區(qū)分的,當(dāng)然 也是必須嚴(yán)格按照 格式 來(lái)做相對(duì)應(yīng)的處理也才是最正確的方法,目前有些事情需要處理一下
先到這里嘍,^_^ bye
java 使用URLDecoder和URLEncoder對(duì)中文進(jìn)行處理
一 URLEncoder
HTML 格式編碼的實(shí)用工具類。該類包含了將 String 轉(zhuǎn)換為 application/x-www-form-urlencoded MIME 格式的靜態(tài)方法。有關(guān) HTML 格式編碼的更多信息,請(qǐng)參閱 HTML 規(guī)范。
對(duì) String 編碼時(shí),使用以下規(guī)則:
字母數(shù)字字符 "a" 到 "z"、"A" 到 "Z" 和 "0" 到 "9" 保持不變。
特殊字符 "."、"-"、"*" 和 "_" 保持不變。
空格字符 " " 轉(zhuǎn)換為一個(gè)加號(hào) "+"。
所有其他字符都是不安全的,因此首先使用一些編碼機(jī)制將它們轉(zhuǎn)換為一個(gè)或多個(gè)字節(jié)。然后每個(gè)字節(jié)用一個(gè)包含 3 個(gè)字符的字符串 "%xy" 表示,其中 xy 為該字節(jié)的兩位十六進(jìn)制表示形式。推薦的編碼機(jī)制是 UTF-8。但是,出于兼容性考慮,如果未指定一種編碼,則使用相應(yīng)平臺(tái)的默認(rèn)編碼。
例如,使用 UTF-8 編碼機(jī)制,字符串 "The string ü@foo-bar" 將轉(zhuǎn)換為 "The+string+%C3%BC%40foo-bar",因?yàn)樵?UTF-8 中,字符 ü 編碼為兩個(gè)字節(jié),C3 (十六進(jìn)制)和 BC (十六進(jìn)制),字符 @ 編碼為一個(gè)字節(jié) 40 (十六進(jìn)制)。
二 URLDecoder
該類包含了將 String 從 application/x-www-form-urlencoded MIME 格式解碼的靜態(tài)方法。
該轉(zhuǎn)換過(guò)程正好與 URLEncoder 類使用的過(guò)程相反。假定已編碼的字符串中的所有字符為下列之一:"a" 到 "z"、"A" 到 "Z"、"0" 到 "9" 和 "-"、"_"、"." 以及 "*"。允許有 "%" 字符,但是將它解釋為特殊轉(zhuǎn)義序列的開(kāi)始。
轉(zhuǎn)換中使用以下規(guī)則:
字母數(shù)字字符 "a" 到 "z"、"A" 到 "Z" 和 "0" 到 "9" 保持不變。
特殊字符 "."、"-"、"*" 和 "_" 保持不變。
加號(hào) "+" 轉(zhuǎn)換為空格字符 " "。
將把 "%xy" 格式序列視為一個(gè)字節(jié),其中 xy 為 8 位的兩位十六進(jìn)制表示形式。然后,所有連續(xù)包含一個(gè)或多個(gè)這些字節(jié)序列的子字符串,將被其編碼可生成這些連續(xù)字節(jié)的字符所代替。可以指定對(duì)這些字符進(jìn)行解碼的編碼機(jī)制,或者如果未指定的話,則使用平臺(tái)的默認(rèn)編碼機(jī)制。
該解碼器處理非法字符串有兩種可能的方法。一種方法是不管該非法字符,另一種方法是拋出 IllegalArgumentException 異常
以上這篇詳談java編碼互轉(zhuǎn)(application/x-www-form-urlencoded)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring整合Quartz實(shí)現(xiàn)動(dòng)態(tài)定時(shí)器的示例代碼
本篇文章主要介紹了Spring整合Quartz實(shí)現(xiàn)動(dòng)態(tài)定時(shí)器的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01
解決IDEA?JDK9沒(méi)有module-info.java的問(wèn)題
這篇文章主要介紹了解決IDEA?JDK9沒(méi)有module-info.java的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
java數(shù)組及arrays類對(duì)數(shù)組的操作實(shí)例
下面小編就為大家?guī)?lái)一篇java數(shù)組及arrays類對(duì)數(shù)組的操作實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
java 使用poi動(dòng)態(tài)導(dǎo)出的操作
這篇文章主要介紹了java 使用poi動(dòng)態(tài)導(dǎo)出的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
解決一個(gè)JSON反序列化問(wèn)題的辦法(空字符串變?yōu)榭占?
在平時(shí)的業(yè)務(wù)開(kāi)發(fā)中,經(jīng)常會(huì)有拿到一串序列化后的字符串要來(lái)反序列化,下面這篇文章主要給大家介紹了如何解決一個(gè)JSON反序列化問(wèn)題的相關(guān)資料,空字符串變?yōu)榭占?需要的朋友可以參考下2024-03-03
Java使用單鏈表實(shí)現(xiàn)約瑟夫環(huán)
這篇文章主要為大家詳細(xì)介紹了Java使用單鏈表實(shí)現(xiàn)約瑟夫環(huán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
SpringBoot四種讀取properties文件的方式(小結(jié))
這篇文章主要介紹了SpringBoot四種讀取properties文件的方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05

