我有一些問題得到了一些法語文本轉換爲UTF8,以便它可以正確顯示,無論是在一個控制檯,文本文件或GUI元素。UTF8字符編碼在Java中
原始字符串
HANDICAP╔ES
這應該是
HANDICAPÉES
下面的代碼片段,顯示我如何使用jackcess數據庫驅動程序讀取在Eclipse/Linux環境中的Acccess MDB文件中。
Database database = Database.open(new File(filepath));
Table table = database.getTable(tableName, true);
Iterator rowIter = table.iterator();
while (rowIter.hasNext()) {
Map<String, Object> row = this.rowIter.next();
// convert fields to UTF
Map<String, Object> rowUTF = new HashMap<String, Object>();
try {
for (String key : row.keySet()) {
Object o = row.get(key);
if (o != null) {
String valueCP850 = o.toString();
// String nameUTF8 = new String(valueCP850.getBytes("CP850"), "UTF8"); // does not work!
String valueISO = new String(valueCP850.getBytes("CP850"), "ISO-8859-1");
String valueUTF8 = new String(valueISO.getBytes(), "UTF-8"); // works!
rowUTF.put(key, valueUTF8);
}
}
} catch (UnsupportedEncodingException e) {
System.err.println("Encoding exception: " + e);
}
}
在你會看到,我想直接轉換爲UTF-8,這似乎並沒有工作的代碼,所以我必須做一個雙轉換。另請注意,使用jackcess驅動程序時似乎沒有指定編碼類型的方法。
感謝, 凸輪
這不是UTF-8,而是CP850。 – Joey 2010-05-04 15:44:43
你是說原始字符串是CP850嗎?我意識到原始字符串不是UTF-8,儘管我不確定哪一種確切的編碼。我試圖將其轉換爲UTF-8,以便正確顯示。我的理解是,UTF-8支持É字符。 謝謝。 – cambo 2010-05-04 16:07:58
當您在CP1252中使用'É'並將其解釋爲CP850時,就會得到'╔'。 – Joey 2010-05-04 16:13:37