我正在嘗試在java中使用PrintStream寫入0xFF文件。當我用十六進制編輯器打開它時,其他值會正確寫入文件,但假設顯示0xFF的值取而代之的是0xC3BF。向文件寫入0xFF的問題
使用的變量類型是int。經過幾次嘗試後,我還發現我可以放入的「最大」值是0x7F,這將在十六進制編輯器中正確顯示,如果我放入0x80,那麼十六進制編輯器將顯示0xC280。
怎麼了?
我正在嘗試在java中使用PrintStream寫入0xFF文件。當我用十六進制編輯器打開它時,其他值會正確寫入文件,但假設顯示0xFF的值取而代之的是0xC3BF。向文件寫入0xFF的問題
使用的變量類型是int。經過幾次嘗試後,我還發現我可以放入的「最大」值是0x7F,這將在十六進制編輯器中正確顯示,如果我放入0x80,那麼十六進制編輯器將顯示0xC280。
怎麼了?
一個小調查顯示,輸出值是UTF-8編碼(以下線的Python):
In [1]: "\xc2\x80".decode("utf-8")
Out[1]: u'\x80'
In [2]: "\xc3\xbf".decode("utf-8")
Out[2]: u'\xff'
確保你爲了寫選擇print
/println
/write
正確的過載整數值作爲字節而不是字符或字符串。所有過載參見documentation of PrintStream。
感謝您指點我正確的方向!我從.print更改爲.write,它的工作原理。 – 2010-10-11 17:12:55
問題在於你寫字符時,它們被編碼爲UTF-8。改寫字節。
你能展示你的代碼嗎? – Dmitry 2010-10-11 16:54:17