2012-05-14 28 views
2

我正在研究一個Java插件,它允許人們通過指定他們希望使用的字符集編碼來寫入和讀取文件。然而,我很困惑我將如何在單個文件中編碼多個編碼。例如,假設A字符來自一個字符集,而B字符來自另一個字符,是否可以將「AAAAABBBBBAAAAA」寫入文件?一個文件可以用Java中的多個字符編碼嗎?

如果這是不可能的,這對於任何編程語言或專門用於Java的情況通常都是如此嗎?如果可能的話,我將如何繼續讀取(解碼)文件?

我不想使用Charset的encode()和decode()方法,因爲他們的測試失敗了(某些字符集沒有正確解碼)。我也不想因爲各種原因使用第三方程序,所以這個問題的範圍純粹是在標準的Java包/代碼中。

非常感謝!
N.S.

+3

你可以寫從不同的編碼到同一個文件產生的字節,但你不一定能夠在不知道從哪裏字符編碼之間的邊界所在的文件進行解碼。當讀取應被解碼成B中的字節,你需要知道得到的字符是否是B.雞和蛋的問題。 –

回答

8

您需要將其作爲字節流讀取,並事先知道字符在哪個字節位置開始和結束,或者使用某些指定字符組開頭和結尾的特殊分隔符/字節範圍。通過這種方式,您可以獲取特定字符組的字節,並最終使用所需的字符編碼對其進行解碼。

此問題不是特定於Java。這個要求很奇怪。我想知道如何混合這樣的字符編碼是有意義的。只需使用一種統一的編碼,例如UTF-8,它幾乎支持人類知道的所有角色。

+0

感謝您的回答!我會盡快接受這個(約7分鐘)。 至於整個事情的「爲什麼」?那麼,這在客戶的心中-_- –

+0

如果事先知道輸入數據的編碼,而且它不是UTF-8,那麼在寫入文件時,您總是可以將其轉換爲UTF-8。 – BalusC

1

當然原則上可以將用不同字符集編碼的文本寫入一個文件,但爲什麼你會想要這樣做呢?

字符編碼只是從文本字符到字節的映射,反之亦然。一個文件由字節組成。編寫文件時,字符編碼決定字符如何轉換爲字節,讀取時決定字節如何轉換回字符。

您可以使用一種字符編碼編碼文件的一部分,使用另一種字符編碼編碼另一部分文件。您必須有一些機制來跟蹤哪些部分使用什麼編碼進行編碼,因爲該文件不會自動跟蹤您的情況。

+0

也許你有一個WARC文件,其中包含來自Web爬網的多個條目。每個條目可能都有原始網站的編碼。 – schmmd

0

我在想這件事,因爲我的客戶剛剛問了一個類似的問題。像BalusC提到的,這不是一個java特定的問題。 經過幾次來回之後,我發現真正的問題可能是'多重信息編碼',而不是多重編碼文件。 即我們有一個xml字符串文本需要用8859-1進行編碼,如果我們將它保存爲一個文件,那麼我們需要對它進行編碼。 xml的默認編碼是UTF-8,我們可能不需要將整個xml編碼爲8859-1。由於xml節點只是將信息傳遞到其他系統和內容(xml節點的值,需要使用8859-1保持)的媒介。那麼在這種情況下我們需要多重編碼嗎?可能不會。我們仍然可以用UTF-8編碼xml,然後傳遞它。一旦客戶機接收到的XML,那麼就需要讀出的UTF-8編碼的文件的信息,並持續如8859-1 XML節點的值。

+0

歡迎來到StackOverflow!這在我看來更像是評論而不是回答。你能否重新制定它,使其更像是一個答案。或者,如果您真的希望將其作爲評論,請自行刪除。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 –

相關問題