日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Charset]UTF-8, UTF-16, UTF-16LE, UTF-16BE的区别

發布時間:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Charset]UTF-8, UTF-16, UTF-16LE, UTF-16BE的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[Charset]UTF-8, UTF-16, UTF-16LE, UTF-16BE的區別?

最近遇到的麻煩事?
charset里的問題, 一般我們都用unicode來作為統一編碼, 但unicode也有多種表現形式?

首先, 我們說的unicode, 其實就是utf-16, 但最通用的卻是utf-8,?
原因: 我猜大概是英文占的比例比較大, 這樣utf-8的存儲優勢比較明顯, 因為utf-16是固定16位的(雙字節), 而utf-8則是看情況而定, 即可變長度, 常規的128個ASCII只需要8位(單字節), 而漢字需要24位?

UTF-16, UTF-16LE, UTF-16BE, 及其區別BOM?
同樣都是unicode, 為什么要搞3種這么麻煩??
先說UTF-16BE (big endian), 比較好理解的, 俗稱大頭?
比如說char 'a', ascii為?
0x61, 那么它的utf-8, 則為 [0x61], 但utf-16是16位的, 所以為[0x00, 0x61]?
再說UTF-16LE(little endian), 俗稱小頭, 這個是比較常用的?
還是char 'a', 它的代碼卻反過來: [0x61, 0x00], 據說是為了提高速度而迎合CPU的胃口, CPU就是這到倒著吃數據的, 這里面有匯編的知識, 不多說?
然后說UTF-16, 要從代碼里自動判斷一個文件到底是UTF-16LE還是BE, 對于單純的英文字符來說還比較好辦, 但要有特殊字符, 圖形符號, 漢字, 法文, 俄語, 火星語之類的話, 相信各位都很頭痛吧, 所以, unicode組織引入了BOM的概念, 即byte order mark, 顧名思義, 就是表名這個文件到底是LE還是BE的,?
其方法就是, 在UTF-16文件的頭2個字節里做個標記: LE [0xFF, 0xFE], BE [0xFE, 0xFF]?

理解了這個后, 在java里遇到utf-16還是會遇到麻煩, 因為要在文件里面單獨判斷頭2個再字節是很不流暢的?

小結:?

Java代碼??
  • InputStreamReader?reader=new?InputStreamReader(fin,?charset)??

  • 1. 如果這個UTF-16文件里帶有BOM的話, charset就用"UTF-16", java會自動根據BOM判斷LE還是BE, 如果你在這里指定了"UTF-16LE"或"UTF-16BE"的話, 猜錯了會生成亂七八糟的文件, 哪怕猜對了, java也會把頭2個字節當成文本輸出給你而不會略過去, 因為[FF FE]或[FE FF]這2個代碼沒有內容, 所以, windows會用"?"代替給你?
    2. 如果這個UTF-16文件里不帶BOM的話, 則charset就要用"UTF-16LE"或"UTF-16BE"來指定LE還是BE的編碼方式


    另外, UTF-8也有BOM的, [0xEF, 0xBB, 0xBF], 但可有可無, 但用windows的notepad另存為時會自動幫你加上這個, 而很多非windows平臺的UTF8文件又沒有這個BOM, 真是難為我們這些程序員啊?

    錯誤的例子?
    1. 文件A, UTF16格式, 帶BOM LE,?
    InputStreamReader reader=new InputStreamReader(fin, "utf-16le")?
    會多輸出一個"?"在第一個字節, 原因: java沒有把頭2位當成BOM?

    2. 文件A, UTF16格式, 帶BOM LE,?
    InputStreamReader reader=new InputStreamReader(fin, "utf-16be")?
    會出亂碼, 原因: 字節的高低位弄反了, 'a' 在文件里 [0x61, 0x00], 但java以為'a'應該是[0x00 0x61]?

    3. 文件A, UTF16格式, 帶BOM BE,?
    InputStreamReader reader=new InputStreamReader(fin, "utf-16le")?
    會出亂碼, 原因: 字節的高低位弄反了, 'a' 在文件里 [0x00, 0x61], 但java以為'a'應該是[0x61 0x00]?

    4. 文件A, UTF16格式, 帶BOM BE,?
    InputStreamReader reader=new InputStreamReader(fin, "utf-16be")?
    會多輸出一個"?"在第一個字節, 原因: java沒有把頭2位當成BOM?

    5. 文件A, UTF16格式, LE 不帶BOM,?
    InputStreamReader reader=new InputStreamReader(fin, "utf-16")?
    會出亂碼, 因為utf-16對于java來說, 默認為be(1.6JDK, 以后的說不準)?
    但windows的notepad打開正常, 因為notepad默認為le, - -#?

    6. 文件A, UTF16格式, BE 不帶BOM,?
    InputStreamReader reader=new InputStreamReader(fin, "utf-16")?
    恭喜你, 蒙對了?
    但winodws的notepad打開時, 每個字符中間都多了一個" ", 因為notepad把它當成ASNI了?

    在windows下輸出unicode文件?
    通過java出來unicode文件, 也容易混淆?

    Java代碼??
  • FileOutputStream?fout=new?FileOutputStream(file);??
  • OutputStreamWriter?writer=new?OutputStreamWriter(fout,?charset);??


  • 1. charset為"UTF-16"時, java會默認添加BOM [0xFE, 0xFF], 并以BE的格式編寫byte?
    2. charset為"UTF-16BE"時, java不會添加BOM, 但編碼方式為 BE?
    3. charset為"UTF-16LE"時, java不會添加BOM, 但編碼方式為 LE?

    以上通過 test.getByte("utf-16"), test.getByte("utf-16be"), test.getByte("utf-16le") 可以驗證?

    而windows的notepad默認的unicode為 LE, 并帶BOM,?
    所以, 推薦輸出 UTF-16LE, 并人為添加BOM, 即:?

    Java代碼??
  • byte[]?bom={-1,?-2};????//FF?FE,?java的byte用的是補碼,?驗證:?b=127,?b+=1,?而b=-128??
  • fout.write(bom); ?
  • 轉載于:https://www.cnblogs.com/xubin0523/archive/2012/10/19/2730913.html

    總結

    以上是生活随笔為你收集整理的[Charset]UTF-8, UTF-16, UTF-16LE, UTF-16BE的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日韩欧美影院 | 免费人成年激情视频在线观看 | 国产精品久久久久不卡 | 黄色大片a级 | 亚洲成人v | 99视频国产精品免费观看a | 性高潮影院 | 国产一级做a爰片久久毛片男男 | 青青操视频在线 | 在线a级 | 久久春色 | 国产肉体ⅹxxx137大胆 | 日本美女毛片 | 极品美女无套呻吟啪啪 | 91香蕉视频在线观看免费 | 欧美做受高潮1 | 极品国产一区 | 农村末发育av片一区二区 | 黄色片子网站 | 国产情侣一区二区三区 | 神马午夜我不卡 | 亚洲综合视频网站 | a级黄毛片 | 欧美性猛交xxx乱大交3蜜桃 | 亚洲一区免费 | 黄色av中文字幕 | 日韩精品视频久久 | 伊人久久中文 | 日韩在线视频二区 | 久久久久久久一区 | 免费在线观看的黄色网址 | 免费精品无码AV片在线观看黄 | av网站免费播放 | 台湾性生生活1 | 人妻夜夜爽天天爽 | 人妻精油按摩bd高清中文字幕 | 午夜视频在线瓜伦 | 99视频在线精品免费观看2 | 大象传媒成人在线观看 | 9.1成人看片 | 三级中文字幕在线 | 成人综合精品 | 精品一区二区不卡 | 欧美sm凌虐视频网站 | 日韩色av | 性折磨bdsm欧美激情另类 | 国产久精品 | av在线三区| 中文字幕乱视频 | 国产精品久久久久久久无码 | 性猛交富婆╳xxx乱大交天津 | 日本老小玩hd老少配 | 福利二区 | 中文字幕精品在线视频 | 欧美sm凌虐视频网站 | 97久久久久久久久久 | 久久亚洲私人国产精品va | japanesehdxxxx| 波多野结衣99 | 亚洲天堂aaa| 五月婷婷网 | 久草视频观看 | 精品中文字幕在线 | 国产精品老牛影院99av | 日韩一卡二卡在线 | 麻豆免费观看网站 | 午夜av免费观看 | 一级黄色大片免费观看 | 欧美一区二区二区 | 欧美精品在欧美一区二区少妇 | 上原亚衣av一区二区三区 | 波多野结衣在线看 | 青青在线精品 | 另类视频在线观看+1080p | 亚洲aaaaaaa| 国内精品在线播放 | 色av影院 | 99热国产在线观看 | 久久久久97 | 91蜜臀精品国产自偷在线 | 在线视频1卡二卡三卡 | 天天想你在线观看完整版高清 | 亚洲资源在线观看 | 中文字幕一区二区三区精品 | 中文字幕乱码一二三区 | 精品一区二区三区免费看 | 一起草国产| 美女100%视频免费观看 | 丰满大乳少妇在线观看网站 | 国产黄在线观看 | 韩国美女一区二区 | 99久久免费国产精精品 | 韩日视频| 色婷婷综合视频 | 欧美三级小说 | 91精品免费在线 | 最近中文字幕免费视频 | 欧美日韩一区视频 | 欧美日韩国产二区 |