簡體   English   中英

Java中的日文字符編碼

[英]Japanese Character Encoding in Java

這是我的問題。 我現在正在使用Java Apache POI來讀取Excel(.xls或.xlsx)文件,並顯示內容。 電子表格中有一些日語字符,我得到的所有日語字符都是“???” 在我的輸出中。 我嘗試使用Shift-JIS,UTF-8和許多其他編碼方式,但它不起作用......這是我的編碼代碼如下:

public String encoding(String str) throws UnsupportedEncodingException{
  String Encoding = "Shift_JIS";
  return this.changeCharset(str, Encoding);
}
public String changeCharset(String str, String newCharset) throws UnsupportedEncodingException {
  if (str != null) {
    byte[] bs = str.getBytes();
    return new String(bs, newCharset);
  }
  return null;
}

我傳遞了每個字符串(str)。 但是當我打印返回值時,它仍然像“???” (如下所示)但不是日文字符(平假名,片假名或漢字)。

title-jp=???

有人可以幫我這個嗎? 非常感謝。

你的changeCharset方法看起來很奇怪。 Java中的String對象最好被認為沒有特定的字符集。 它們使用Unicode,因此可以表示所有字符,而不僅僅是一個區域子集。 您的方法說:使用我的系統的字符集(無論可能是什么)將字符串轉換為字節,然后嘗試使用其他字符集(在newCharset指定)來解釋這些字節,因此可能無效。 如果在編碼中轉換為字節,則應使用相同的編碼讀取這些字節。

更新

要將String轉換為Shift-JIS(日本常用的區域編碼),您可以說:

byte[] jis = str.getBytes("Shift_JIS");

如果您將這些字節寫入文件,然后在區域設置全部以日本為中心的Windows計算機上的記事本中打開該文件,記事本將以日語顯示(沒有其他任何內容,它將假定文本是在系統的本地編碼中)。

但是,您可以將其保存為UTF-8(以3字節UTF-8導入器序列為前綴),並且記事本也會將其顯示為日語。 Shift-JIS只是將日文文本表示為字節的一種方式。

我懷疑你不應該首先這樣做。 如果確實是Apache POI的錯,那么你需要從數據中獲取原始的原始字節, 不僅僅是使用系統默認的encdoing。

另一方面,我認為Apache POI完全可能設法做正確的事情,而這只是一個輸出問題。 我建議你根據其Unicode代碼點轉儲你已經擁有的原始字符串(完全刪除你的encoding方法),例如

 for (int i = 0; i < text.length; i++) {
     System.out.println("U+" + Integer.toHexString(text.charAt(i));
 }

然后根據Unicode網站上的 Unicode值檢查這些Unicode值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM