Java中如何對(duì)字符串進(jìn)行utf-8編碼
java對(duì)字符串進(jìn)行utf-8編碼
我們?cè)谡{(diào)用第三方 API 時(shí),常常會(huì)被要求用到路徑變量,而路徑變量一般都是 utf-8 編碼的,因此需要對(duì)傳入的字符串參數(shù)進(jìn)行 utf-8 編碼處理。
本文提供一種使用 URLEncoder 庫(kù)進(jìn)行編碼的方式。
廢話(huà)少說(shuō),上代碼。
// 使用 URLEncoder 庫(kù)對(duì)字符串進(jìn)行 utf-8 編碼
import java.net.URLEncoder;
public String encodePathVariable(String pathVariable) {
? ?String ret = "default";
? ? try {
? ? ? ? ret = URLEncoder.encode(pathVariable, "utf-8");
? ? ? ? System.out.println(pathVariable + " : " + ret);
? ? }catch(Exception e) {
? ? ? ? System.out.println(e);
? ? }
? ? return ret;
}java按照字節(jié)截取字符串-utf-8
如何按照utf-8的字節(jié)截取字符串呢?
utf-8,中文一個(gè)漢字是三個(gè)字節(jié),一個(gè)字母或特殊符號(hào)是1個(gè)字節(jié)。
String類(lèi)沒(méi)有提供按字節(jié)截取字符串的方法,
StringUtil提供了截取的方法,但是默認(rèn)是8858-1的,而且不能指定編碼格式

但是給了我們思路,我們就將這段代碼粘貼出來(lái),將后面的編碼格式給改成utf-8的

建個(gè)測(cè)試方法測(cè)試下

還是有些問(wèn)題,截取3個(gè)字節(jié)時(shí),正好把中字截取出來(lái)了,4個(gè)字節(jié)時(shí)有亂碼,5個(gè)字節(jié)時(shí),還有亂碼,6個(gè)字節(jié)時(shí),打印了兩個(gè)字節(jié),正好兩個(gè)中文漢字。也就是說(shuō),本身是三個(gè)字節(jié)的文字,我們只取了它的1個(gè)字節(jié),所以識(shí)別不出來(lái)出現(xiàn)了亂碼!
經(jīng)過(guò)反復(fù)測(cè)試,亂碼就是?這種符號(hào),別的符號(hào)沒(méi)測(cè)出來(lái),應(yīng)該也沒(méi)啥別的符號(hào),我們就將這種符號(hào)截取掉就行了。
最后測(cè)試的代碼

亂碼沒(méi)有了,而且準(zhǔn)確率還高,因?yàn)樽址那闆r挺復(fù)雜的,什么都有,文字,標(biāo)點(diǎn),特殊符號(hào),穿插其中,字節(jié)也不一樣,網(wǎng)上看了很多例子,都是他們自己編寫(xiě)的算法啥的,用了之后,錯(cuò)誤率挺高的。
/**
*string:字符串
offset:從哪個(gè)字節(jié)開(kāi)始
len:從哪個(gè)字節(jié)結(jié)束
*/
public static String getFromCompressedUnicode(String string,int offset,int len) throws UnsupportedEncodeingException{
byte[] bytes = string.getBytes("utf-8");
int len_to_use = Math.min(len,bytes.length - offset);
return new String(bytes,offset,len_to_use,"utf-8").replaceAll("?","")
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java編程實(shí)現(xiàn)軌跡壓縮之Douglas-Peucker算法詳細(xì)代碼
這篇文章主要介紹了Java編程實(shí)現(xiàn)軌跡壓縮之Douglas-Peucker算法詳細(xì)代碼,具有一定借鑒價(jià)值,需要的朋友可以參考。2017-11-11
java鏈表應(yīng)用--基于鏈表實(shí)現(xiàn)隊(duì)列詳解(尾指針操作)
這篇文章主要介紹了java鏈表應(yīng)用--基于鏈表實(shí)現(xiàn)隊(duì)列,結(jié)合實(shí)例形式分析了java基于鏈表實(shí)現(xiàn)隊(duì)列尾指針相關(guān)操作使用技巧,需要的朋友可以參考下2020-03-03
如何使用JDBC連接數(shù)據(jù)庫(kù)并執(zhí)行SQL語(yǔ)句
JDBC是Java數(shù)據(jù)庫(kù)連接的縮寫(xiě),是Java程序與數(shù)據(jù)庫(kù)進(jìn)行交互的標(biāo)準(zhǔn)API。JDBC主要包括Java.sql和javax.sql兩個(gè)包,通過(guò)DriverManager獲取數(shù)據(jù)庫(kù)連接對(duì)象Connection,并通過(guò)Statement或PreparedStatement執(zhí)行SQL語(yǔ)句2023-04-04
基于SpringBoot創(chuàng)建Web頁(yè)面并熱更新的操作步驟
SpringBoot是一個(gè)用于快速開(kāi)發(fā)單個(gè)微服務(wù)的框架,它基于 Spring 框架,簡(jiǎn)化了Spring應(yīng)用的初始化過(guò)程和開(kāi)發(fā)流程,本文給大家介紹了如何基于SpringBoot創(chuàng)建Web頁(yè)面并熱更新,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
MyBatis中criteria的or(或查詢(xún))語(yǔ)法說(shuō)明
這篇文章主要介紹了MyBatis中criteria的or(或查詢(xún))語(yǔ)法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

