2012-06-06 58 views
3

我想在類文件中這樣設置一個Unicode字符:在.java文件中使用unicode字符?

TextView tv = ...; 
tv.setText("·"); 

有什麼潛在的錯誤,在一個.java文件使用Unicode字符?

謝謝

+1

這可能是一句迂腐的評論,但官方的[Java語言規範](http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html)指出「程序是用Unicode編寫的。「我想這意味着你不能在Java中擁有*非Unicode字符*,無論這意味着什麼。您可能想要重述這個問題。術語和命名在這項業務中很重要。 :) –

回答

4

編號Java字符串支持Unicode,因此您不應該遇到任何問題。您可能需要檢查TextView類處理所有Unicode字符(它應該),但Java本身將處理Unicode字符。

您還應該確保該文件保存在正確的編碼設置。基本上這意味着你的編輯器應該把java文件保存爲UTF-8編碼的Unicode。有關此更多詳細信息,請參閱此答案的評論。

+5

您還需要確保您使用的編輯器將Java源代碼保存爲UTF-8(這正是編譯器所期望的)。在Eclipse中,最簡單的方法是導航到Windows - >首選項 - >常規 - >工作區,然後將文本文件編碼設置爲UTF-8。 –

+0

我總是想知道爲什麼Eclipse根據操作系統環境設置默認的文本文件編碼。國際海事組織,IntelliJ總體上有更好的默認設置。 –

+0

@TedHopp嗯,它不會理解UTF-16(帶有BOMs)等? – 2012-06-06 04:46:52

3

在.java文件中使用unicode字符有什麼可能存在錯誤嗎?

如你所知,在JVM中的字符串存儲爲Unicode的 - 這樣的問題是如何處理的Unicode在Java源文件 ...

總之,使用Unicode是好的。有幾個方法可以解決它......

默認情況下,javac預計編譯源文件是在平臺默認的編碼。這可以通過使用-encoding標誌覆蓋:

-encoding encoding
設置源文件的編碼名稱,如 EUCJIS/SJIS/ISO8859-1/UTF8。如果未指定-encoding,則使用 平臺默認轉換器。

或者,如果它是一個字符(像它看起來是),你可以在你的平臺默認的編碼源文件,並使用Unicode轉義序列指定字符:

tv.setText("\u1234"); 

...其中'1234'是你想要的字符的Unicode值。

另一種替代方法是首先將您的文件保存爲與Unicode兼容的編碼(例如UTF-8),然後使用native2ascii將該文件轉換爲您的本機編碼(它會將任何超出範圍的字符轉換爲相應的Unicode轉義序列)。

NAME
native2ascii - 原產於ASCII轉換

提要
native2ascii [ options ] [ inputfile [outputfile]]

描述
Java編譯器和其它Java工具只能包含流程文件的Latin-1或Unicode編碼(\udddd表示法)字符。 native2ascii將包含其他字符編碼的文件轉換爲包含Latin-1或Unicode編碼字符的 文件。

如果省略outputfile,則使用標準輸出進行輸出。另外,如果省略inputfile,則使用標準輸入進行輸入。