① java可供判斷某字元串是什麼編碼的一行代碼
明確告訴你,沒有辦法,你必須先知道編碼,才能把byte數組轉成字元,如果已經是java的String對象的話,則一定是Unicode的,這個沒有為什麼,Java就是這么定的。
② 怎麼 知道 java字元串 編碼格式
這樣的測試方法是不正確的。getBytes(charset)是解碼,new String(byte[], charset)是編碼。new String(str.getBytes(charset),charset)是解碼再編碼,無論charset是什麼編碼格式,返回的字元串內容原始str是一致,因此equals方法都是返回true,達不到測試字元串編碼格式的目的。個人觀點:正確的測試姿勢應該是這樣的:
Stringcharset="xxx";//假定編碼格式
Stringstr="中文";
booleanflag=str.equals(newString(str.getBytes(),charset));
flag為true則表明str的編碼格式是假定的編碼格式。其中說明str.getBytes()該方法就是按其自身編碼格式去解碼。其自身編碼格式跟你的操作系統編碼格式或你使用的IDE設置的文件的Text file encoding有關。
③ java中怎麼判斷一個字元串的編碼
明確告訴你,沒有辦法,你必須先知道編碼,才能把byte數組轉成字元,如果已經是java的String那麼只有unicode編碼一種。
④ 技術問題:java中如何判斷字元串內容是否是一種編碼格式
可以看下java.nio.charset.Charset這個類,這個類裡面有個靜態方法:
public static boolean isSupported(String charsetName)通知是否支持指定的 charset。
參數:
charsetName - 請求的 charset 名稱;可能是規范名稱或別名
返回:
當且僅當當前 Java 虛擬機支持指定的 charset 時才返回 true
拋出:
IllegalCharsetNameException - 如果給定的 charset 名稱是非法的
IllegalArgumentException - 如果給定的 charsetName 為 null
拿這個靜態方法判斷並捕捉異常,如果是true那就是正確的,否則就是false
⑤ Java: 如何知道一個字元串當前是什麼字元集
判斷java字元串的字元集有多種方法,我們一一討論如下:
1、通過把未知編碼字元串,用猜想的編碼再解碼,觀察字元串是不是正確還原了。
原理:假如目標編碼沒有數組中的字元,那麼編碼會破壞,無法還原。
缺點:假如字元少,而正巧錯誤的猜想編碼中有這種位元組,就會出錯。
如:new String("tested str".getBytes("enc"),"enc")
2、大多數時候,我們只要判斷本地平台編碼和utf8,utf8編碼相當有規律,所以可以分析是否是utf8,否則使用本地編碼。
原理:分析byte[]來判斷規律。
缺點:有時,個別本地編碼位元組在utf8中也會出現,導致出錯,需要分析。
如:判斷是否utf-8代碼:
public static boolean isValidUtf8(byte[] b,int aMaxCount){
int lLen=b.length,lCharCount=0;
for(int i=0;i
byte lByte=b[i++];//to fast operation, ++ now, ready for the following for(;;)
if(lByte>=0) continue;//>=0 is normal ascii
if(lByte<(byte)0xc0 || lByte>(byte)0xfd) return false;
int lCount=lByte>(byte)0xfc?5:lByte>(byte)0xf8?4
:lByte>(byte)0xf0?3:lByte>(byte)0xe0?2:1;
if(i+lCount>lLen) return false;
for(int j=0;j=(byte)0xc0) return false;
}
return true;
⑥ java 怎麼判斷文本內容的編碼格式
UTF-8編碼的文本文檔,有的帶有BOM (Byte Order Mark, 位元組序標志),即0xEF, 0xBB, 0xBF,有的沒有。Windows下的txt文本編輯器在保存UTF-8格式的文本文檔時會自動添加BOM到文件頭。在判斷這類文檔時,可以根據文檔的前3個位元組來進行判斷。然而BOM不是必需的,而且也不是推薦的。對不希望UTF-8文檔帶有BOM的程序會帶來兼容性問題,例如Java編譯器在編譯帶有BOM的UTF-8源文件時就會出錯。而且BOM去掉了UTF-8一個期望的特性,即是在文本全部是ASCII字元時UTF-8是和ASCII一致的,即UTF-8向下兼容ASCII。
在具體判斷時,如果文檔不帶有BOM,就無法根據BOM做出判斷,而且IsTextUnicode API也無法對UTF-8編碼的Unicode字元串做出判斷。那在編程判斷時就要根據UTF-8字元編碼的規律進行判斷了。
UTF-8是一種多位元組編碼的字元集,表示一個Unicode字元時,它可以是1個至多個位元組,在表示上有規律:
1位元組:0xxxxxxx
2位元組:110xxxxx 10xxxxxx
3位元組:1110xxxx 10xxxxxx 10xxxxxx
4位元組:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
這樣就可以根據上面的特徵對字元串進行遍歷來判斷一個字元串是不是UTF-8編碼了。
舉例代碼:
java.io.File f=new java.io.File("待判定的文本文件名");
try{
java.io.InputStream ios=new java.io.FileInputStream(f);
byte[] b=new byte[3];
ios.read(b);
ios.close();
if(b[0]==-17&&b[1]==-69&&b[2]==-65)
System.out.println(f.getName()+"編碼為UTF-8");
else System.out.println(f.getName()+"可能是GBK");
}catch(Exception e){
e.printStackTrace();
}
⑦ java:如何判斷字元串是不是亂碼
我覺得樓主說的是在WIN下常見的亂碼,但這在JAVA中是沒有的,因為JAVA用的是UNICODE集.可以參考這里:http://..com/question/31882416.html?si=3
所以設計的是哪種語言,輸出的也是哪種語言.就像現在可以直接查看日文網頁而不會是亂碼一樣.
而二樓說的正則表達式就是漢字在UNICODE集中的位置.
⑧ 怎麼使用java判斷一個字元串是屬於什麼編碼
樓上全是傻X, 這樣沒有的,使用開源組件吧detector.jar
用法很簡單
/*------------------------------------------------------------------------
detector是探測器,它把探測任務交給具體的探測實現類的實例完成。
cpDetector內置了一些常用的探測實現類,這些探測實現類的實例可以通過add方法
加進來,如ParsingDetector、 JChardetFacade、ASCIIDetector、UnicodeDetector。
detector按照「誰最先返回非空的探測結果,就以該結果為准」的原則返回探測到的
字元集編碼。
--------------------------------------------------------------------------*/
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
/*-------------------------------------------------------------------------
ParsingDetector可用於檢查HTML、XML等文件或字元流的編碼,構造方法中的參數用於
指示是否顯示探測過程的詳細信息,為false不顯示。
---------------------------------------------------------------------------*/
detector.add(new ParsingDetector(false));
/*--------------------------------------------------------------------------
JChardetFacade封裝了由Mozilla組織提供的JChardet,它可以完成大多數文件的編碼
測定。所以,一般有了這個探測器就可滿足大多數項目的要求,如果你還不放心,可以
再多加幾個探測器,比如下面的ASCIIDetector、UnicodeDetector等。
---------------------------------------------------------------------------*/
detector.add(JChardetFacade.getInstance());
//ASCIIDetector用於ASCII編碼測定
detector.add(ASCIIDetector.getInstance());
//UnicodeDetector用於Unicode家族編碼的測定
detector.add(UnicodeDetector.getInstance());
java.nio.charset.Charset charset = null;
File f=new File("E://specialCar//test.csv");
try {
charset = detector.detectCodepage(new BufferedInputStream(new FileInputStream(f)),100);
} catch (Exception ex) {ex.printStackTrace();}
if(charset!=null){
System.out.println(f.getName()+"編碼是:"+charset.name());
}else{
System.out.println(f.getName()+"未知");
}
採納哈
⑨ java 中如何查看字元串的編碼類型
可以通過以下方法來進行編碼格式判斷,輸入一個字元串,之後返回字元串編碼類型。
public static String getEncoding(String str) {
String encode = "GB2312";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { //判斷是不是GB2312
String s = encode;
return s; //是的話,返回「GB2312「,以下代碼同理
}
} catch (Exception exception) {
}
encode = "ISO-8859-1";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { //判斷是不是ISO-8859-1
String s1 = encode;
return s1;
}
} catch (Exception exception1) {
}
encode = "UTF-8";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { //判斷是不是UTF-8
String s2 = encode;
return s2;
}
} catch (Exception exception2) {
}
encode = "GBK";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { //判斷是不是GBK
String s3 = encode;
return s3;
}
} catch (Exception exception3) {
}
return ""; //如果都不是,說明輸入的內容不屬於常見的編碼格式。
⑩ java怎麼判斷byte的原字元串的編碼
判定是否是UTF-8編碼格式的代碼片段如下:
[java] view plain
File file = new File(path);
InputStream in= new java.io.FileInputStream(file);
byte[] b = new byte[3];
in.read(b);
in.close();
if (b[0] == -17 && b[1] == -69 && b[2] == -65)
System.out.println(file.getName() + ":編碼為UTF-8");
else
System.out.println(file.getName() + ":可能是GBK,也可能是其他編碼");