婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 計算機中的字符串編碼、亂碼、BOM等問題詳解

計算機中的字符串編碼、亂碼、BOM等問題詳解

熱門標簽:洛陽便宜外呼系統廠家 湖北穩定外呼系統 滄州智能外呼系統收費 醫院地圖標注 嘟聲的電銷機器人 語音平臺系統 地圖標注和圖片標注 電銷機器人怎么收費 忻州外呼系統接口對接

因為電腦是windows 7系統,開發環境又在linux,經常在linux碰到亂碼問題,很是痛苦,于是決定好好了解編碼的來龍氣脈,并分享個各位,免得出現亂碼時不知所措。

是否存在文件編碼

在講解字符編碼之前,我們需先明確文件本身沒有編碼一說,只有文字才有編碼的概念,我們通常說某個文件是什么編碼,通常是指文件里字符的編碼。

vim為什么會出現亂碼

我在linux下一般使用vim進行文件編輯,發現經常會碰到亂碼的情況,那么為什么會出現亂碼呢? 首先我們了解下vim編碼方面的基礎知識,關于編碼方面vim存在3個變量:

1.encoding: Vim 內部使用的字符編碼方式,包括 Vim 的 buffer (緩沖區)、菜單文本、消息文本等。默認是根據你的locale選擇.用戶手冊上建議只在 .vimrc 中改變它的值,事實上似乎也只有在.vimrc 中改變它的值才有意義。你可以用另外一種編碼來編輯和保存文件,如你的vim的encoding為utf-8,所編輯的文件采用cp936編碼,vim會自動將讀入的文件轉成utf-8(vim的能讀懂的方式),而當你寫入文件時,又會自動轉回成cp936(文件的保存編碼).

2.fileencoding: Vim 中當前編輯的文件的字符編碼方式,Vim 保存文件時也會將文件保存為這種字符編碼方式 (不管是否新文件都如此)。

3.termencoding: Vim 所工作的終端 (或者 Windows 的 Console 窗口) 的字符編碼方式。如果vim所在的term與vim編碼相同,則無需設置。如其不然,你可以用vim的termencoding選項將自動轉換成term的編碼.

當這三個變量的編碼出現問題時就會出現亂碼:

1.encoding不是utf-8編碼:如果encoding不是utf-8編碼,其他字符可能無法轉為 Encoding的指定編碼。如:如果encoding是gbk編碼,而文件內容采用big5編碼的,其就無法轉換為gbk編碼。

2.fileencoding不對:Fileencoding編碼是vim的讀取文件內容時使用的編碼,如果其編碼與文件字符編碼不同,必然會出現亂碼。Fileencoding編碼一般由vim自動檢測,可以使用fileencodings設置,Vim自動探測fileencoding的順序列表。不過vim有時候會檢測錯誤,就會出現亂碼了。

3.termencoding編碼不對:我們登錄服務器一般采用遠程登錄,這就涉及終端編碼問題,我經常碰到因為終端編碼不對導致亂碼的。如:SecureCRT設置為utf-8編碼,而vim的termencoding卻為gbk,就出現亂碼了。

字符編碼介紹

說了那么多,到底字符編碼是什么玩意呢?

字符(Character)是文字與符號的總稱,包括文字、圖形符號、數學符號等,一組抽象字符的集合就是字符集(Charset)。 字符集常常和一種具體的語言文字對應起來,該文字中的所有字符或者大部分常用字符就構成了該文字的字符集,比如英文字符集,漢字字符集。 計算機要處理各種字符,就需要將字符和二進制內碼對應起來,這種對應關系就是字符編碼(Encoding)。 制定編碼首先要確定字符集,并將字符集內的字符排序,然后和二進制數字對應起來。根據字符集內字符的多少,會確定用幾個字節來編碼。

字符集和編碼的區別:

字符集字符的集合,不一定適合計算機存儲、網絡傳送、處理,有時須經編碼(encode)后才能應用。如Unicode字符集可依不同需要以UTF-8、UTF-16、UTF-32等方式編碼。

字符編碼的發展

字符編碼大概分為三個發展階段。

ASCII編碼:ASCII(American Standard Code for Information Interchange,美國信息互換標準代碼)是基于拉丁字母的一套電腦編碼系統。 因為計算機起源于美國,為表示英文字符,他們制定了ASCII編碼,ASCII編碼使用7位二進制來表示字符,高位用來做奇偶校驗,0×20以下的字節狀態稱為”控制碼”,同時包括標點符號、數字等,當時人們覺得已經夠用了。

多種編碼并存:但隨著計算機的廣泛應用,別的國家也開始使用計算機,但是很多國家用的不是英文,他們的字母里有許多是ASCII里沒有的,為了可以在計算機保存他們的文字,他們決定采用127號之后的空位來表示這些新的字母、符號,還加入了很多畫表格時需要用下到的橫線、豎線、交叉等形狀,一直把序號編到了最后一個狀態255。從128到255這一頁的字符集被稱”擴展字符集”。最優秀的擴展方案是ISO 8859-1,通常稱之為Latin-1,Latin-1包括了足夠的附加字符集來寫基本的西歐語言。

后來其他國家也開始使用計算機,為了表達自己國家的文字,不同的國家和地區制定了不同的標準,產生了GB2312,BIG5,JIS等各自的編碼標準。通常使用0×80~xFF范圍的2個字節來表示1個字符。比如:漢字 ‘中' 在中文操作系統中,使用 [0xD6,0xD0]這兩個字節存儲。 這些使用2個字節來代表一個字符的延伸編碼方式,稱為 ANSI 編碼。

在簡體中文系統下,ANSI 編碼代表 GB2312 編碼,在日文操作系統下,ANSI 編碼代表 JIS 編碼。 不同 ANSI 編碼之間互不兼容,當信息在國際間交流時,無法將屬于兩種語言的文字,存儲在同一段 ANSI 編碼的文本中。

Unicode編碼 由于不同國家的ANSI編碼互不兼容,為了使國際間信息交流更加方便,國際組織制定了UNICODE字符集,為各種語言中的每一個字符設定了統一并且唯一的數字編號,以滿足跨語言、跨平臺進行文本轉換、處理的要求。 UNICODE開始制訂時,計算機的存儲器容量極大地發展了,空間再也不成為問題了。于是ISO就直接規定必須用兩個字節,也就是16位來統一表示所有的字符,對于ascii里的那些“半角”字符,UNICODE保持其原編碼不變,只是將其長度由原來的8位擴展為16位,而其他文化和語言的字符則全部重新統一編碼。由于”半角”英文符號只需要用到低8位,所以其高8位永遠是0,因此這種大氣的方案在保存英文文本時會多浪費一倍的空間。

但是UNICODE來到時,一起到來的還有計算機網絡的興起,UNICODE如何在網絡上傳輸也是一個必須考慮的問題,于是面向傳輸的眾UTF(UCS Transfer Format)標準出現了,顧名思義,UTF8就是每次8個位傳輸數據,而UTF16就是每次16個位,只不過為了傳輸時的可靠性,從UNICODE到UTF時并不是直接的對應,而是要過一些算法和規則來轉換。

學過計算機網絡的童鞋都知道,在網絡里傳遞信息時有一個很重要的問題,就是對于數據高低位的解讀方式,一些計算機是采用低位先發送的方法,例如我們PC機采用的INTEL架構;而另一些是采用高位先發送的方式。在網絡中交換數據時,為了核對雙方對于高低位的認識是否是一致的,采用了一種很簡便的方法,就是在文本流的開始時向對方發送一個標志符——如果之后的文本是高位先發送,那就發送”FEFF”,反之,則發送”FFFE”。(IP/TCP協議規定網絡字節序使用大端法)
因為UTF-8編碼兼容之前的ASCII編碼,而且有利于傳輸,其得到了非常廣泛的應用。

從UNICODE到UTF8的轉換規則:

復制代碼 代碼如下:

Unicode             UTF-8
0000 - 007F         0xxxxxxx
0080 - 07FF         110xxxxx 10xxxxxx
0800 - FFFF         1110xxxx 10xxxxxx 10xxxxxx

漢字ANSI編碼發展

GB2312:為了表示漢字,我們國家首先發明了GB2312 編碼,GB2312 編碼規定一個小于127的字符的意義與原來相同,但兩個大于127的字符連在一起時,就表示一個漢字,前面的一個字節(他稱之為高字節)從0xA1用到0xF7,后面一個字節(低字節)從0xA1到0xFE,這樣我們就可以組合出大約7000多個簡體漢字了。在這些編碼里,我們還把數學符號、羅馬希臘的字母、日文的假名們都編進去了,連在 ASCII 里本來就有的數字、標點、字母都統統重新編了兩個字節長的編碼,這就是常說的”全角”字符,而原來在127號以下的那些就叫”半角”字符了。

GBK 后來發現很多偏僻字和少數名族的語言還是沒辦法編碼進來,為了表示這些字符,于是干脆不再要求低字節一定是127號之后的內碼,只要第一個字節是大于127就固定表示這是一個漢字的開始,不管后面跟的是不是擴展字符集里的內容。結果擴展之后的編碼方案被稱為 GBK 標準,GBK包括了GB2312的所有內容,同時又增加了近20000個新的漢字(包括繁體字)和符號。

GB18030 后來少數民族也要用電腦了,于是我們再擴展,又加了幾千個新的少數民族的字,GBK擴成了GB18030。從此之后,中華民族的文化就可以在計算機時代中傳承了。

BOM介紹

1.BOM的來歷: 為了識別 Unicode 文件,Microsoft 建議所有的 Unicode 文件應該以 ZERO WIDTH NOBREAK SPACE(U+FEFF)字符開頭。這作為一個“特征符”或“字節順序標記(byte-order mark,BOM)”來識別文件中使用的編碼和字節順序。

2.不同的系統對BOM的支持:因為一些系統或程序不支持BOM,因此帶有BOM的Unicode文件有時會帶來一些問題。

①JDK1.5以及之前的Reader都不能處理帶有BOM的UTF-8編碼的文件,解析這種格式的xml文件時,會拋出異常:Content is not allowed in prolog。
②Linux/UNIX 并沒有使用 BOM,因為它會破壞現有的 ASCII 文件的語法約定。
③不同的編輯工具對BOM的處理也各不相同。使用Windows自帶的記事本將文件保存為UTF-8編碼的時候,記事本會自動在文件開頭插入BOM(雖然BOM對UTF-8來說并不是必須的)。而其它很多編輯器用不用BOM是可以選擇的。UTF-8、UTF-16都是如此。

3.BOM與XML:XML解析讀取XML文檔時,W3C定義了3條規則:

①如果文檔中有BOM,就定義了文件編碼;
②如果文檔中沒有BOM,就查看XML聲明中的編碼屬性;
③如果上述兩者都沒有,就假定XML文檔采用UTF-8編碼。

決定文本的字符集與編碼

軟件通常有三種途徑來決定文本的字符集和編碼:

1.檢測BOM

對于Unicode文本最標準的途徑是檢測文本最開頭的幾個字節。   

復制代碼 代碼如下:

    開頭字節        Charset/encoding
    EF BB BF        UTF-8
    FE FF           UTF-16/UCS-2, little endian(UTF-16LE)
    FF FE           UTF-16/UCS-2, big endian(UTF-16BE)
    FF FE 00 00     UTF-32/UCS-4, little endian.
    00 00 FE FF     UTF-32/UCS-4, big-endia

2.用戶選擇: 采取一種比較安全的方式來決定字符集及其編碼,那就是彈出一個對話框來請示用戶。

3.采取“猜”的方法: 如果軟件不想麻煩用戶,或者它不方便向用戶請示,那它只能采取自己“猜”的方法,軟件可以根據整個文本的特征來猜測它可能屬于哪個charset,這就很可能不準了。使用記事本打開那個“聯通”文件就屬于這種情況。(把原本屬于ANSI編碼的文件當成UTF-8處理。

記事本的幾種編碼介紹

1.ANSI編碼:記事本默認保存的編碼格式是:ANSI,即本地操作系統默認的內碼,簡體中文一般為GB2312。這個怎么驗證呢?用記事本保存后,使用EmEditor、EditPlus和UltraEdit之類的文本編輯器打開。推薦使用EmEditor,打開后,在又下角會顯示編碼:GB2312。

2.Unicode編碼:用記事本另存為時,編碼選擇“Unicode”,用EmEditor打開該文件,發現編碼格式是:UTF-16LE+BOM(有簽名)。用十六進制方式查看,發現開頭兩字節為:FF FE。這就是BOM。

3.Unicode big endian 用記事本另存為時,編碼選擇“Unicode”,用EmEditor打開該文件,發現編碼格式是:UTF-16BE+BOM(有簽名)。用十六進制方式查看,發現開頭兩字節為:FE FF。這就是BOM。

4.UTF-8 :用記事本另存為時,編碼選擇“UTF-8”,用EmEditor打開該文件,發現編碼格式是:UTF-8(有簽名)。用十六進制方式查看,發現開頭三個字節為:EF BB BF。這就是BOM。

您可能感興趣的文章:
  • UTF-8 Unicode Ansi 漢字GB2321幾種編碼轉換程序
  • php utf-8轉unicode的函數
  • 常用字符集編碼詳解(ASCII GB2312 GBK GB18030 unicode UTF-8)
  • unicode utf-8 gb18030 gb2312 gbk各種編碼對比
  • VBS實現GB2312,UTF-8,Unicode,BIG5編碼轉換工具
  • 戲說編碼發展史

標簽:宜賓 山南 內蒙古 96 防城港 巴彥淖爾 日照 定州

巨人網絡通訊聲明:本文標題《計算機中的字符串編碼、亂碼、BOM等問題詳解》,本文關鍵詞  計算機,中的,字符串,編碼,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《計算機中的字符串編碼、亂碼、BOM等問題詳解》相關的同類信息!
  • 本頁收集關于計算機中的字符串編碼、亂碼、BOM等問題詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩欧美一区中文| 日韩欧美黄色影院| 国产精品麻豆欧美日韩ww| 日韩精品高清不卡| 91视频一区二区三区| 蜜桃视频一区二区三区在线观看| 日韩美女视频在线| 亚洲成人资源网| 美脚の诱脚舐め脚责91| 亚洲第一精品在线| www.一区二区| 中文字幕一区二区三区色视频| 国产在线一区二区综合免费视频| 亚洲婷婷在线视频| 中文字幕 久热精品 视频在线| 久久综合色天天久久综合图片| 韩国女主播成人在线观看| 国产精品久久二区二区| 日韩欧美在线1卡| 美女在线视频一区| 日韩成人一级大片| 亚洲综合一二区| 亚洲国产精品高清| 在线观看视频一区| 成人av在线影院| 国产呦精品一区二区三区网站| 亚洲精品一卡二卡| 亚洲精品国产第一综合99久久 | 精品99一区二区三区| 972aa.com艺术欧美| 国模一区二区三区白浆| 一区二区三区四区在线免费观看 | 成人激情综合网站| 国产黄色精品网站| 日本不卡的三区四区五区| 亚洲精品五月天| 日韩一级片网址| 69久久夜色精品国产69蝌蚪网| 色综合久久中文综合久久牛| 国产91在线|亚洲| 亚洲一区在线播放| 亚洲高清免费观看高清完整版在线观看 | 免费人成在线不卡| 亚洲精品免费在线观看| 中文字幕一区二区三区不卡| 久久精品亚洲一区二区三区浴池 | 国产欧美日本一区视频| 欧美性高清videossexo| 精品国精品国产| 日本精品免费观看高清观看| 亚洲国产综合在线| 亚洲精品写真福利| 亚洲国产毛片aaaaa无费看| 一二三四社区欧美黄| 亚洲h在线观看| 午夜私人影院久久久久| 青青草国产精品亚洲专区无| 国产夫妻精品视频| 97久久久精品综合88久久| 色狠狠av一区二区三区| 国产精品亚洲视频| 欧洲日韩一区二区三区| 欧美二区三区的天堂| 日韩一区二区三区免费观看| 欧美精品乱码久久久久久| www国产成人| 国产日产欧产精品推荐色| 国产精品福利电影一区二区三区四区| 亚洲综合色视频| 久久精品99国产精品日本| 午夜伊人狠狠久久| 欧美亚男人的天堂| 91视频精品在这里| 欧美日韩国产一级片| 亚洲午夜视频在线| 久久国内精品自在自线400部| 91免费视频大全| 欧美性色aⅴ视频一区日韩精品| 欧美日韩免费一区二区三区| 欧美精品一区二区久久久| 国产无一区二区| 中日韩免费视频中文字幕| 亚洲五码中文字幕| 久久精品欧美日韩| 亚洲一区二区五区| 久久久91精品国产一区二区精品| 亚洲mv在线观看| 久久精品人人做| 一区二区三区四区国产精品| 国产福利不卡视频| 精品成人佐山爱一区二区| 国产精品一区在线| 国产精品久久夜| 欧美日韩免费高清一区色橹橹| 久久国产精品72免费观看| 成人黄色免费短视频| 欧美在线观看视频一区二区三区| 久久一日本道色综合| 亚洲福利国产精品| 99久久婷婷国产| 日韩精品资源二区在线| 日韩国产精品久久久久久亚洲| 播五月开心婷婷综合| 精品国产91久久久久久久妲己 | 亚洲一区二区精品久久av| 91麻豆国产在线观看| 中文字幕日韩av资源站| 成人福利视频网站| 亚洲精品中文在线| 欧美喷潮久久久xxxxx| 石原莉奈在线亚洲三区| 日韩午夜在线播放| 狠狠久久亚洲欧美| 久久久久一区二区三区四区| 懂色av一区二区三区蜜臀| 国产欧美视频一区二区| 91蝌蚪porny| 天堂一区二区在线| 欧美成人伊人久久综合网| 国产一区二区在线观看视频| 国产精品久线在线观看| 欧美午夜理伦三级在线观看| 免费成人在线观看| 亚洲国产婷婷综合在线精品| 欧美顶级少妇做爰| 国产电影精品久久禁18| 亚洲精品乱码久久久久久| 欧美裸体一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 日韩一卡二卡三卡四卡| 欧美专区日韩专区| 制服丝袜亚洲精品中文字幕| 欧美精品一区二区三区在线播放 | 精品福利一二区| 亚洲综合色成人| 日韩视频123| aaa亚洲精品一二三区| 亚洲va韩国va欧美va精品 | 日韩视频在线永久播放| 精品一区二区三区视频 | 欧美在线视频日韩| 国产一区激情在线| 亚洲伦在线观看| 欧美不卡在线视频| 欧美三级视频在线| 成人性生交大合| 五月婷婷激情综合网| 国产精品国产自产拍在线| 欧美一区二区在线观看| 99麻豆久久久国产精品免费 | 另类专区欧美蜜桃臀第一页| 国产欧美久久久精品影院| 一区二区国产视频| 3751色影院一区二区三区| 午夜亚洲国产au精品一区二区| 日韩成人精品在线| 亚洲色图欧美偷拍| 欧美va亚洲va在线观看蝴蝶网| 99久久国产免费看| 国产成人在线色| 久久99精品久久久| 亚洲va欧美va国产va天堂影院| 综合久久久久综合| 欧美韩国日本综合| 欧美国产日韩亚洲一区| 欧美猛男超大videosgay| 91丨porny丨蝌蚪视频| 成人av午夜电影| 成人综合激情网| 99在线精品免费| 91美女视频网站| 在线一区二区三区四区五区 | 久久国产精品色婷婷| 中文字幕欧美一| 午夜久久久影院| 韩国精品主播一区二区在线观看 | 久久黄色级2电影| 国产精品一区免费视频| 成人免费视频app| 欧美喷潮久久久xxxxx| 91行情网站电视在线观看高清版| 在线看不卡av| 26uuu国产日韩综合| 亚洲人成伊人成综合网小说| 国产精品久久久久久久第一福利| 国产精品家庭影院| 国产欧美日韩精品a在线观看| 国产午夜亚洲精品羞羞网站| 国产精品理伦片| 狠狠色丁香久久婷婷综| 精品在线一区二区| 精品久久久久香蕉网| 久久婷婷综合激情| 国产精品久久久一本精品 | 制服丝袜一区二区三区| 99re成人在线| 欧美一三区三区四区免费在线看 | 欧美电影免费提供在线观看| 精品久久五月天| 免费欧美在线视频|