我正在寫一個函數,它應該檢測使用的字符集,然後將其切換到utf-8。我正在使用juniversalchardet,它是mozilla的universalchardet的java端口。
這是我的代碼:在java中更改編碼
private List<List<String>> setProperEncoding(List<List<String>> input) {
try {
// Detect used charset
UniversalDetector detector = new UniversalDetector(null);
int position = 0;
while ((position < input.size()) & (!detector.isDone())) {
String row = null;
for (String cell : input.get(position)) {
row += cell;
}
byte[] bytes = row.getBytes();
detector.handleData(bytes, 0, bytes.length);
position++;
}
detector.dataEnd();
Charset charset = Charset.forName(detector.getDetectedCharset());
Charset utf8 = Charset.forName("UTF-8");
System.out.println("Detected charset: " + charset);
// rewrite input using proper charset
List<List<String>> newLines = new ArrayList<List<String>>();
for (List<String> row : input) {
List<String> newRow = new ArrayList<String>();
for (String cell : row) {
//newRow.add(new String(cell.getBytes(charset)));
ByteBuffer bb = ByteBuffer.wrap(cell.getBytes(charset));
CharBuffer cb = charset.decode(bb);
bb = utf8.encode(cb);
newRow.add(new String(bb.array()));
}
newLines.add(newRow);
}
return newLines;
} catch (Exception e) {
e.printStackTrace();
return input;
}
}
我的問題是,當我閱讀例如波蘭的字母,如L,A,C和similiar字母替換的字符文件?和其他奇怪的事情。我究竟做錯了什麼?編輯: 編輯我使用eclipse。
方法參數是讀取MultipartFile的結果。只需使用FileInputStream獲取每一行,然後通過某個分隔符分割everyline(它已爲xls,xlsx和csv文件準備好)。沒有什麼特別的。
你是如何編譯你的代碼的? Eclipse?命令提示符 ?螞蟻? Maven? – VirtualTroll
一旦你在'字符串'中輸入了字符,它們就已經是字符,而不是字節。 – gaborsch
「輸入」的來源是什麼?請爲此顯示您的代碼。 – gaborsch