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)行編碼的方式。
廢話少說,上代碼。
// 使用 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類沒有提供按字節(jié)截取字符串的方法,
StringUtil提供了截取的方法,但是默認(rèn)是8858-1的,而且不能指定編碼格式

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

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

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

亂碼沒有了,而且準(zhǔn)確率還高,因?yàn)樽址那闆r挺復(fù)雜的,什么都有,文字,標(biāo)點(diǎn),特殊符號(hào),穿插其中,字節(jié)也不一樣,網(wǎng)上看了很多例子,都是他們自己編寫的算法啥的,用了之后,錯(cuò)誤率挺高的。
/**
*string:字符串
offset:從哪個(gè)字節(jié)開始
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)文章
Mybatis中的@Param及動(dòng)態(tài)SQL詳解
這篇文章主要介紹了Mybatis中的@Param及動(dòng)態(tài)SQL詳解,@Param是MyBatis所提供的作為Dao層的注解,作用是用于傳遞參數(shù),從而可以與SQL中的的字段名相對(duì)應(yīng),需要的朋友可以參考下2023-10-10
Java實(shí)時(shí)獲取基金收益項(xiàng)目源碼分享
這篇文章主要介紹了Java實(shí)時(shí)獲取基金收益項(xiàng)目源碼分享,主要包括JAVA爬取天天基金網(wǎng)數(shù)據(jù)使用實(shí)例、應(yīng)用技巧、基本知識(shí)點(diǎn)總結(jié)和需要注意事項(xiàng),需要的朋友可以參考下2021-03-03
Java讀取properties文件連接數(shù)據(jù)庫(kù)的方法示例
這篇文章主要介紹了Java讀取properties文件連接數(shù)據(jù)庫(kù)的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04
Spring Cloud Gateway替代zuul作為API網(wǎng)關(guān)的方法
本文簡(jiǎn)要介紹如何使用Spring Cloud Gateway 作為API 網(wǎng)關(guān)(不是使用zuul作為網(wǎng)關(guān)),結(jié)合實(shí)例代碼給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧2023-02-02
Android中幾種圖片特效的處理的實(shí)現(xiàn)方法
這篇文章主要介紹了 Android中幾種圖片特效的處理的實(shí)現(xiàn)方法的相關(guān)資料,這里有放大縮小圖片,獲得圓角圖片,獲得帶倒影圖片的幾種方法,需要的朋友可以參考下2017-08-08
詳解SpringBoot與SpringCloud的版本對(duì)應(yīng)詳細(xì)版
這篇文章主要介紹了詳解SpringBoot與SpringCloud的版本對(duì)應(yīng)詳細(xì)版,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Quarkus集成open api接口使用swagger ui展示
這篇文章主要為大家介紹了Quarkus集成open?api接口使用swagger?ui的展示示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
SpringBoot YAML語(yǔ)法基礎(chǔ)詳細(xì)整理
YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標(biāo)記語(yǔ)言)的遞歸縮寫。在開發(fā)的這種語(yǔ)言時(shí),YAML 的意思其實(shí)是:“Yet Another Markup Language”(仍是一種標(biāo)記語(yǔ)言),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10

