所以,現在我正在用Java編寫一個小包閱讀器。 所有的Unicode字符串都有句點(或者至少它們是如何在十六進制編輯器中呈現的),所以當我讀取它們時,我需要轉到偏移量併爲分配的內存讀取該信息。就像,如果它是來自Xbox 360文件的遊戲名稱,我需要讀取80個字節並從中刪除'。'以獲得可讀的字符串。爲什麼Unicode字符間存有句點?
那麼爲什麼unicode這樣存儲在文件中?是表示它是Unicode還是它是分配填充還是什麼?
我不確定我的問題是否有效,它只是一直在我心中。 謝謝。
所以,現在我正在用Java編寫一個小包閱讀器。 所有的Unicode字符串都有句點(或者至少它們是如何在十六進制編輯器中呈現的),所以當我讀取它們時,我需要轉到偏移量併爲分配的內存讀取該信息。就像,如果它是來自Xbox 360文件的遊戲名稱,我需要讀取80個字節並從中刪除'。'以獲得可讀的字符串。爲什麼Unicode字符間存有句點?
那麼爲什麼unicode這樣存儲在文件中?是表示它是Unicode還是它是分配填充還是什麼?
我不確定我的問題是否有效,它只是一直在我心中。 謝謝。
在記事本中創建一個包含「A
」的文件,將其保存爲Unicode,並且Windows將使用UTF-16(LE)編碼來執行此操作;這使用2個字節來存儲字符:0x41 0x00
。
當您查看十六進制編輯器文件(其中一無所知,也不關心文本編碼)0x41
可以顯示爲A
,但00
映射到任何字符所以.
(或同等學歷)顯示,讓您知道那裏有一個字節。
感謝您的解釋:)有道理。 – user3530525
它最有可能就是您的十六進制編輯器如何嘗試將空字符顯示爲文本。 –
@AlexK。 - 我理解像空終止符,但爲什麼字符之間會有空字符? – user3530525
閱讀utf-16。對於ASCII字符的表示,最高有效字節爲0 – bolov