⑴ java如何判斷編碼是否是utf8編碼
UTF-8編碼規范及如何判斷文本是UTF-8編碼的
UTF-8的編碼規則很簡單,只有二條:
1)對於單位元組的符號,位元組的第一位設為0,後面7位為這個符號的unicode碼。因此對於英語字母,UTF-8編碼和ASCII碼是相同的。
2)對於n位元組的符號(n>1),第一個位元組的前n位都設為1,第n+1位設為0,後面位元組的前兩位一律設為10。剩下的沒有提及的二進制位,全部為這個飢銷符號的unicode碼。
根據以上說明下面給出一段java代碼判斷UTF-8格式
/**
*UTF-8編碼格式判斷
*
*@paramrawtext
*需要分析的數據
*@return是否為UTF-8編碼格式
*/
publicstaticbooleanisUTF8(byte[]rawtext){
intscore=0;
inti,rawtextlen=0;
intgoodbytes=0,asciibytes=0;
神肢鉛//MaybealsouseUTF8ByteOrderMark:EFBBBF
//
rawtextlen=rawtext.length;
for(i=0;i<rawtextlen;i++){
if((rawtext[i]&(byte)0x7F)==rawtext[i]){
//最高位是0的ASCII字元
asciibytes++;
//IgnoreASCII,canthrowoffcount
}elseif(-64<=rawtext[i]&&rawtext[i]<=-33
游好//-0x40~-0x21
&&//Twobytes
i+1<rawtextlen&&-128<=rawtext[i+1]
&&rawtext[i+1]<=-65){
goodbytes+=2;
i++;
}elseif(-32<=rawtext[i]
&&rawtext[i]<=-17
&&//Threebytes
i+2<rawtextlen&&-128<=rawtext[i+1]
&&rawtext[i+1]<=-65&&-128<=rawtext[i+2]
&&rawtext[i+2]<=-65){
goodbytes+=3;
i+=2;
}
}
if(asciibytes==rawtextlen){
returnfalse;
}
score=100*goodbytes/(rawtextlen-asciibytes);
//Ifnotabove98,
//Allowsforsome(few)badformedsequences
if(score>98){
returntrue;
}elseif(score>95&&goodbytes>30){
returntrue;
}else{
returnfalse;
}
另外對於正規的文本文件來說UTF-8的文件開頭有3個位元組來標識該文本是UTF-8編碼
EF,BB,BF三個位元組
但通常不採用以下這種方案因為許多文件不標准
(byte[]b)
{
if(b!=null&&b.length>3)
{
byteutf8[]={(byte)0xEF,(byte)0xBB,(byte)0xBF};
if((b[0]==utf8[0])&&(b[1]==utf8[1])&&(b[2]==utf8[2]))
returntrue;
}
returnfalse;
}
⑵ 為什麼java的默認編碼不是utf-8 而是gbk
因為系統是中文語言的,得到的是GBK編碼,所以肯定不是utf的。
工具:
win7
jdk
方法:
在計算機上右鍵選擇屬性
⑶ 怎麼使java輸出的文件以UTF-8編碼
代碼如下:
(Stringname)throwsFileNotFoundException,UnsupportedEncodingException{
FileOutputStreamoutputStream=newFileOutputStream(name);
=newOutputStreamWriter(outputStream,"utf-8");
BufferedWriterwriter=newBufferedWriter(outputWriter);
returnwriter;
}
⑷ 怎麼用java把一個字元串進行utf8編碼
String text = 「字元串」;
byte[] b_utf8 = text.getBytes("UTF-8"); //utf-8
byte[] b_iso88591 = text.getBytes("ISO8859-1"); //iso8859-1
byte[] b_gbk = text.getBytes("GBK"); //gbk
string unicode = getUnicode(text);//unicode
public static String getUnicode(String source) {
String result = "";
for (int i = 0; i < source.length(); i++) {
result += "\u"+Integer.toHexString((int) source.charAt(i));
}
return result;
}
⑸ java 怎麼把一個字元串進行utf8編碼
樓上答得不對,請相信我的方法,已經確認過:
String s="abc";
String s1=URLEncoder.encode(s, "utf-8");
⑹ java下如何設置utf-8
可以直接在開發工具中設置java文件的含掘編碼:
eclipse文件編碼設置:
1. 點擊談沖核window。
2. 在列表最下點擊reference。
3. 在reference界面點擊Workspace
4. 在右邊的Tex file encoding點判胡擊Other。
5. 選擇 GBK或者 UTF-8編碼即可。
⑺ 在java中gbk怎麼轉utf8編碼
java中,編碼是位元組轉字元的伍寬時候產生的不同映射造成的差異。那我們就可以利用這一點實現。例如,我們有一個gbk編碼格式的字元串,那我們先把它的位元組得到。
String s = "腔爛亮abc";
byte[] b = s.getBytes();
再將其轉為需要的編碼格式歷讓。如utf-8
String newStr = new String(b,"utf-8")
binggo~!!
⑻ java怎麼設置utf8
伺服器端
修改資料庫配置文件/etc/my.cnf
character-set-server=utf8mb4
collation_server=utf8mb4_unicode_ci
重啟MySQL(按照官方文答培檔,這兩個選項都是可以動態設置的,但是實際的經驗是Server必須重啟一下)
已有的表修改編碼為utf8mb4
ALTER TABLE
tbl_name
CONVERT TO CHARACTER SET
charset_name;
使用下面這個語句只是修改了表的default編碼
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;
客戶端
jdbc的連接字元串不支持utf8mb4,這個 這種方式 來解決的,如果伺服器端設置了character_set_server=utf8mb4,則客戶端會自動將傳過去的utf-8視作清和唯utf8mb4。
Connector/J did not support utf8mb4 for servers 5.5.2 and newer.
Connector/J now auto-detects servers configured with character_set_server=utf8mb4 or treats the Java encoding utf-8 passed using characterEncoding=... as utf8mb4 in the SET NAMES= calls it makes when establishing the connection. (Bug #54175)
其他的client端,比如php、python需要看下client是否支持,如果不能在連接字元串中指定的話,可以在獲取連接之後,執行」set names utf8mb4″來解決這個問題;
因為utf8mb4是utf8的超集,理論上即使client修改字元集為utf8mb4,也會不棚滑會對已有的utf8編碼讀取產生任何問題。
⑼ java如何把string轉為utf-8
java不同編碼之間進行轉換,都需要使用unicode作為中轉。
String str = "任意字元串";
str = new String(str.getBytes("gbk"),"utf-8");
備注說明:
str.getBytes("UTF-8"); 意思是以UTF-8的編碼取得位元組
new String(XXX,"UTF-8"); 意思是以UTF-8的編碼生成字元串飢沖
舉例:
public static String getUTF8XMLString(String xml) {
// A StringBuffer Object
StringBuffer sb = new StringBuffer();
sb.append(xml);
String xmString = "";
String xmlUTF8="";
try {
xmString = new String(sb.toString().getBytes("UTF-8"));
xmlUTF8 = URLEncoder.encode(xmString, "UTF-8");
System.out.println("utf-8 編碼:" + xmlUTF8) ;
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// return to String Formed
return xmlUTF8;
(9)javautf8編碼擴展閱讀:
UTF-8編碼規則:
如果只有一個位元組則其最高二進制位為0;如果是多位元組,其第一個位元組從最高位開始,連續的二進制位值為1的個數決定了其編碼茄肢頌的位元組數,其餘各位元組均以10開頭。
實際表示ASCII字元的UNICODE字元,將會編碼成1個位元組,並且UTF-8表示與ASCII字元表示是一樣的。所有其他的UNICODE字元轉化成UTF-8將需要至少2個位元組。每個位元組由一個換碼序列開始。第一個位元組由唯一的換碼序列,由n位連續的1加一位0組成,首位元組連續的1的個數表示字元編碼所需的位元組數。
Unicode轉換為UTF-8時,可以將Unicode二進制從低位往高位取出二進制數字,每次取6位,如上顫鄭述的二進制就可以分別取出為如下示例所示的格式,前面按格式填補,不足8位用0填補。
⑽ java怎麼把把字元轉成utf-8
java不同編碼之間進行轉換,都需要使用unicode作為中轉。
以utf-8轉gbk為例,示例代碼如下:
String t = "這是一個字元串aaa111";
String utf8 = new String(t.getBytes( "UTF-8"));
System.out.println(utf8);
String unicode = new String(utf8.getBytes(),"UTF-8");
System.out.println(unicode);
String gbk = new String(unicode.getBytes("GBK"));
System.out.println(gbk);