課程
/后端開發
/Java
/文件傳輸基礎——Java IO流
為什么從項目中拷貝出來的utf-8編碼的文件,就可以正常打開?而手工創建的非ANSI編碼(如課程中的utf-8編碼的“聯”文件)的文件打開時就會亂碼?二者有何區別?
2017-02-05
源自:文件傳輸基礎——Java IO流 1-1
正在回答
一切都是由于BOM
當我們直接在記事本中直接創建文本文件,
不使用另存為
那么文本文件默認以ansi編碼來保存文字信息,卻沒有給他加上BOM,
(BOM)就是該文本編碼格式的標記,用來告訴記事本(或者其他軟件這里面的內容有什么編碼來解析)
另存為這個過程就是加了BOM
你沒有另存為就沒有BOM
那么問題來了
記事本說“mdzz,這到底要我怎么解析呢?沒辦法,一個個試吧,誒!“
由于默認的聯通,聯,在用ANSI保存時,編碼格式類似UTF-8,所以解析為utf-8,而聯想不符合utf-8編碼規則
于是乎
內容就生氣了
“。。。。。。。。我明明是以ANSI鎖的的,你卻用utf-8的鑰匙來打開我,,,不開心(~……~),亂碼吧,啊哈哈哈”
我為了3積分打這么多字也不容易啊,點個贊吧,謝謝!
另外補充下
BOM:在一個文本文件或者一段字符編碼前加上幾個固定的字節用于識別:
EF BB BF - 我是UTF-8
FF FE - 我是UTF-16LE
FE FF - 我是UTF-16BE
兄弟,不要拿那個"聯"來說事,你試試其他的,Java是面向對象高度封裝的,前期學習過多考慮底層實現不利于學習,打個比方,別人把各種工具都做好了,你只要知道怎么用就行了,會用工具就能干事,你非要知道工具是怎么做的,時間會不夠的。再說一句,那個“聯”真是一個巧合。
電腦上默認ANSI 而那個聯文件是一種巧合,創建出來的是utf-8,但里面的文字是ANSI編碼存放的,這個針對的是電腦的ANSI 認不出 這個直接創建的utf-8,由于字節可以是任何編碼,文件是存儲這些編碼的地方,那個直接拷貝出來的utf-8的文件,只是保證了本身自己的編碼規則。
簡單的說用什么編碼,就用什么解碼
舉報
為您介紹IO流的使用,以及對象的序列化和反序列化的內容
1 回答為什么拷貝出來的文件這么大啊。。
3 回答拷貝文件練習時出現的異常
4 回答為什么我的項目目錄下不顯示創建的文件
1 回答使用FileInputStream實現拷貝文件時出現亂碼
2 回答為什么我的demo下面沒有創建出來文件
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2017-02-10
一切都是由于BOM
當我們直接在記事本中直接創建文本文件,
不使用另存為
那么文本文件默認以ansi編碼來保存文字信息,卻沒有給他加上BOM,
(BOM)就是該文本編碼格式的標記,用來告訴記事本(或者其他軟件這里面的內容有什么編碼來解析)
另存為這個過程就是加了BOM
你沒有另存為就沒有BOM
那么問題來了
記事本說“mdzz,這到底要我怎么解析呢?沒辦法,一個個試吧,誒!“
由于默認的聯通,聯,在用ANSI保存時,編碼格式類似UTF-8,所以解析為utf-8,而聯想不符合utf-8編碼規則
于是乎
內容就生氣了
“。。。。。。。。我明明是以ANSI鎖的的,你卻用utf-8的鑰匙來打開我,,,不開心(~……~),亂碼吧,啊哈哈哈”
我為了3積分打這么多字也不容易啊,點個贊吧,謝謝!
2017-02-10
另外補充下
BOM:在一個文本文件或者一段字符編碼前加上幾個固定的字節用于識別:
EF BB BF - 我是UTF-8
FF FE - 我是UTF-16LE
FE FF - 我是UTF-16BE
2017-02-06
兄弟,不要拿那個"聯"來說事,你試試其他的,Java是面向對象高度封裝的,前期學習過多考慮底層實現不利于學習,打個比方,別人把各種工具都做好了,你只要知道怎么用就行了,會用工具就能干事,你非要知道工具是怎么做的,時間會不夠的。再說一句,那個“聯”真是一個巧合。
2017-02-06
電腦上默認ANSI 而那個聯文件是一種巧合,創建出來的是utf-8,但里面的文字是ANSI編碼存放的,這個針對的是電腦的ANSI 認不出 這個直接創建的utf-8,由于字節可以是任何編碼,文件是存儲這些編碼的地方,那個直接拷貝出來的utf-8的文件,只是保證了本身自己的編碼規則。
2017-02-06
簡單的說用什么編碼,就用什么解碼