漢字編碼

漢字編碼


一、漢字所占的字節數

對于一個字符串sizeof("請放手"),結果值是4。測試操作系統:Centos 6.4,硬件平臺:Windows 7 32位 + VirtualBox 4.3.12。看來用sizeof()來計算漢字所占用的字節或空間是不準確的。
strlen("請放手"),返回值是9。

二、漢字編碼問題

在使用libxml2輸出的時候,出現了占用空間不一致的問題。
讀出的漢字用的是3位UTF-8編碼,在另外一個系統中用的是2位GB2312編碼。
比如:GB2312 Unicode UTF-8值分別對應于

GB2312UnicodeUTF-8
BABA6C49E6B189

見:GB2312 to UTF-8 - Row 26: 0xBAA1 to 0xBAFE '漢'
在對提取的漢字進行顯示的時候,尤其是系統對編碼的支持有限定要求的時候,需要確定字符的編碼格式,否則出來的全部都是亂碼。

三、GB2312與UTF-8的轉換

REFER:漢字編碼對照表(gb2312/unicode/utf8) 【轉帖】
REFER:吳劍: UTF-8, Unicode, GB2312格式串轉換之C語言版
REFER:GNU libiconv

四、VIM漢字編碼與顯示問題)

Note:在VIM中輸入漢字的小技巧,當文件的fileencoding/編碼格式是UTF-8的時候,如果沒有漢語拼音輸入法,輸入漢字可以用一種新的方法,那就是CTRL+q+u+xxxx,其中xxxx是漢字的Unicode編碼,不是UTF-8編碼。

1、常用的漢字編碼
①GB2312
GB2312字符集中除常用簡體漢字字符外還包括希臘字母、日文平假名及片假名字母、俄語西里爾字母等字符,未收錄繁體中文漢字和一些生僻字。可以用繁體漢字測試某些系統是不是只支持GB2312編碼。
②GBK
GBK編碼是 GB2312 編碼的超集,向下完全兼容GB2312,同時GBK收錄了Unicode基本多文種平面中的所有C-J-K漢字。同 GB2312一樣,GBK也支持希臘字母、日文假名字母、俄語字母等字符,但不支持韓語中的表音字符(非漢字字符)。GBK還收錄了GB2312不包含的 漢字部首符號、豎排標點符號等字符。
③CP936
④EUC_CN
Extended Unix Code (EUC) is a multibyte character encoding system used primarily for Japanese, Korean, and simplified Chinese.
⑤GB18030
GB18030編碼向下兼容GBK和GB2312,兼容的含義是不僅字符兼容,而且相同字符的編碼也相同。GB18030收錄了所有Unicode3.1中的字符,包括中國少數民族字符,GBK不支持的韓文字符等等,也可以說是世界大多民族的文字符號都被收錄在內。
GBK和GB2312都是雙字節等寬編碼,如果算上和ASCII兼容所支持的單字節,也可以理解為是單字節和雙字節混合的變長編碼。

2、理解幾個概念

①. termencodingEncoding used for **the terminal**. This specifies what character encoding the keyboard produces and the display will understand. For the GUI it only applies to the keyboard. 
終端使用的編碼方式,指定了鍵盤輸出的編碼格式和屏幕能夠正常顯示的編碼方式②. encodingSets the character encoding used inside Vim. It applies to text in the buffers, registers, Strings in expressions, text stored in the vim info file, etc. Changing this option will not change the encoding of the existing text in vim. The character encoding of files can be different from **encoding**. This is specified with **file encoding**. The conversion is done with iconv() or as specified with ‘charconvert'
encoding適用于vim的內部緩存、寄存器、字符串、vim info 文本等的編碼方式。改變encoding,不會改變vim中當前文件的編碼格式。文件的編碼由fileencoding來指定,與 encoding 不一樣。可以通過iconv()或'charconver'來轉換。
如果工作用的編碼中含有無法轉換為內部編碼的字符,在這些字符就會丟失。因此,在選擇 Vim 的內部編碼的時候,一定要使用一種表現能力足夠強的編碼,例如UTF8,以免影響正常工作。③. fileencodingSets the character encoding for the file of this buffer. When 'file encoding' is different from 'encoding', conversion will be done when reading and writing the file.
文件自身的編碼方式。如果fileencoding和encoding不一致,那么在讀取和寫入文件時,會對編碼方式進行轉換。
通過打開文件后設置 fileencoding,我們可以將文件由一種編碼轉換為另一種編碼④. fileencodingsThis is a list of character encodings considered when starting to edit an existing file. When a file is read, Vim tries to use the first mentioned character encoding. If an error is detected, the next one in the list is tried. When an encoding is found that works, 'file encoding' is set to it. If all fail, 'file encoding' is set to an empty string, which means the value of 'encoding' is used.
Note that 'fileencodings' is not used for a new file, the global value of 'file encoding' is used instead.
是一個字符編碼的列表。當vim打開一個文件時,會嘗試使用列表中的第一個字符編碼方式。如果檢測到錯誤,就用列表中的下一個。當找到一個可以正常工作的字符編碼方式后,file encoding就被設置成找到的字符編碼方式。如果最后都失敗了,fileencoding就被設置成空的,這意味者字符的編碼方式就跟 encoding變量的值一樣了。這樣通過這個列表,Vim可以自動判斷文件的編碼,自動判斷失敗時還可手動設定 fileencoding 來指定編碼。因此,設置 fileencodings 的時候,一定要把要求嚴格的、當文件不是這個編碼的時候更容易出現解碼失敗的編碼方式放在前面,把寬松的編碼方式放在后面。

假如encodingfileencoding不匹配,比如encoding=utf-8,但是fileencoding=big5,則在保存文件的時候會提示:E513 write error conver.

REFER:shell和vim中亂碼原因及消除辦法
REFER:Vim 編碼/Coding

五、讓Linux Bash顯示多種漢字編碼方案

1、顯示當前的編碼方案
env | grep LANG
2、list系統支持的、所有的編碼方案

參考:


1、Python libxml2 parsing xml having Chinese characters
2、GB2312與UTF-8對照表
3、shell和vim中亂碼原因及消除辦法
4、Software Developer Must Know About Unicode and Character Sets
Please do not write another line of code until you finish reading this article.
5、CJKV Information Processing: CJKV Computing
6、
7、Vim and unicode keybindings: math, IPA, and more

轉載于:https://www.cnblogs.com/xuanyuanchen/p/5844567.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/254506.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254506.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254506.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Noise噪音halcon算子,持續更新

目錄add_noise_distributionadd_noise_whitegauss_distributionnoise_distribution_meansp_distributionadd_noise_distribution 功能:向一個圖像添加噪聲。 add_noise_white 功能:向一個圖像添加噪聲。 gauss_distribution 功能:產生一…

sublime text3 package control 報錯

安裝sublime text3之后,安裝package control 報錯,錯誤信息:There are no packages available for installation 根據提示,找到錯誤解決辦法:https://packagecontrol.io/doc... 其實意思就是你的電腦代理出了問題&…

HTML圖片元素(標記)

<html> <head> <title>第一個網頁</title> </head> <body> ***************圖片元素******************</br> <img srcmm.jpg /> </body> </html> 新建一個文件夾“text”,在text文件夾內新建index.html并放入一張…

Optical-Flow光流halcon算子,持續更新

目錄optical_flow_mgunwarp_image_vector_fieldvector_field_lengthderivate_vector_fieldoptical_flow_mg 功能&#xff1a;計算兩個圖像之間的光流。 unwarp_image_vector_field 功能&#xff1a;使用一個矢量場來展開一個圖像。 vector_field_length 功能&#xff1a;計…

Oracle中procedure和function創建舉例

Procedure創建與執行&#xff1a;Case1&#xff1a; create or replace procedure procedure_name(id user.table_name.columne_name%type)is begin delete from user.table_name where columne_nameid;exception when others then dbms_output.put_line(errors);end&#xff1…

Liunx 中tr的用法

1、將/etc/issue文件中的內容轉換為大寫后保存至/tmp/issue.out文件中cat /etc/issue |tr a-z A-Z > /tmp/issue.out2、將當前系統登錄用戶的信息轉換為大寫后保存至/tmp/who.out文件中who | tr a-z A-Z >> who.out3、一個linux用戶給root發郵件&#xff0c;要who求郵…

ASP.NET Aries 3.0發布(附帶通用API設計及基本教程介紹)

主要更新&#xff1a; 1&#xff1a;升級處理機制&#xff08;js請求由同步變更為異步&#xff09; 2&#xff1a;優化前端JS&#xff1a;包括API和配置方式。 3&#xff1a;增加InputDialog功能。 4&#xff1a;增遠遠程驗證功能。 5&#xff1a;優化權限安全機制。 6&#xf…

多線程并發之原子性(六)

最近在網上找到好多的多線程關于原子性的例子&#xff0c;說的都不是非常的明確&#xff0c;對于剛學習多線程的新手而言很容誤導學員&#xff0c;在這里&#xff0c;我通過多個例子對多線程的原子性加以說明。 例子一&#xff1a;傳統技術自增 package face.thread.volatilep;…

Points角點halcon算子,持續更新

目錄corner_responsedots_imagepoints_foerstnerpoints_harrispoints_harris_binomialpoints_lepetitpoints_sojkacorner_response 功能&#xff1a;在圖像中尋找角點。 dots_image 功能&#xff1a;在一個圖像中增強圓形點。 points_foerstner 功能&#xff1a;使用Frstn…

預編譯頭文件來自編譯器的早期版本,或者預編譯頭為 C++ 而在 C 中使用它(或相反)

當 Visual C 項目啟用了預編譯頭 (Precompiled header) 功能時&#xff0c;如果項目中同時混合有 .c 和 .cpp 源文件&#xff0c;則可能收到 C1853 編譯器錯誤&#xff1a;fatal error C1853: pjtname.pch precompiled header file is from a previous version of the compiler…

甲骨文稱 Java 序列化的存在是個錯誤,計劃刪除

甲骨文計劃從 Java 中去除序列化功能&#xff0c;因其在安全方面一直是一個棘手的問題。 Java 序列化也稱為 Java 對象序列化&#xff0c;該功能用于將對象編碼為字節流...Oracle 的 Java 平臺小組的首席架構師 Mark Reinhold 說&#xff1a;“刪除序列化是一個長期目標&#x…

CreateProcess

Windows 進程創建完整過程&#xff08;除去細節&#xff09; 當前流程是分析WinXP x86得到的&#xff0c;在最新版本Windows上不一定正確&#xff0c;但是可以做一個參考&#xff0c; 由于我這里符號并不全&#xff0c;所以導致我這里有些東西看到的可能是錯誤的&#xff0c;誤…

系統:Centos 7.2 內核3.10.0-327.el7.x86_64 # 內核需要高于2.6.32

系統&#xff1a;Centos 7.2 內核3.10.0-327.el7.x86_64 # 內核需要高于2.6.32 Drbd : 192.168.8.111&#xff1a;node1/dev/drdb0 /mydeta 192.168.8.112 : node2Mysql_vip: 192.168.8.200 #下章實現 # 需要的軟件包&#xff1a;mariadb-5.5.53-linux-i686.tar.gzdrbd84-utils…

Smoothing濾波處理halcon算子,持續更新

目錄anisotropic_diffusionbilateral_filterbinomial_filtereliminate_min_maxeliminate_spfill_interlacegauss_filterguided_filterinfo_smoothisotropic_diffusionmean_imagemean_nmean_spmedian_imagemedian_rectmedian_separate_median_weightedmidrange_imagerank_imager…

日志文件在VS中輸出為亂碼問題

原因&#xff1a;主要是文件文字格式問題&#xff08;使用使用 Unicode 字符集&#xff09;&#xff1a;修改項目/屬性/常規/字符集/ 未設置

初學者電腦編程入門

1、首先要對編程有個比較大概的了解&#xff0c;編程的對象&#xff0c;編程的原理&#xff0c;編程的目的等等。2、在了解編程基本知識后&#xff0c;要想想自己學習編程后到底要干什么以確定學習的方向。比如說是想要開發手機app&#xff0c;網站開發&#xff0c;企業系統等。…

MVC架構模式(2)

簡介&#xff1a; MVC最初是在Smaltalk_80中被用來構建用戶界面的。M代表模型Model&#xff0c;V代表視圖View&#xff0c;C代表控制器Controller。 Model模型層&#xff0c;可以簡單理解就是數據層&#xff0c;用于提供數據。在項目中&#xff0c;&#xff08;簡單理解&#x…

Scene Flow場景流halcon算子,持續更新

目錄scene_flow_calibscene_flow_uncalibscene_flow_calib 功能&#xff1a;計算兩個立體圖像對之間校準的場景流。 scene_flow_uncalib 功能&#xff1a;計算兩個立體圖像對之間未校準的場景流。

ios學習之旅---指針也不難

1、認識指針#include <stdio.h> //基本數據類型作為函數參數傳遞是值傳遞 //void moveFront(int x ,int y) //{ // x x 2; //} void test() {// 確定當前坐標int x 20;int y 150;printf("%p\n",&x);printf("%lu\n",&x);*((int *)(0…

FFmpeg中MPEG-4編碼程序追蹤,其他FFMPEG自帶編碼器同理

FFmpeg中與MPEG-4編碼相關的主要文件有mpegvideo.c&#xff0c;h263.c等。在mpegvideo.c中&#xff0c; AVCodec mpeg4_encoder { "mpeg4", CODEC_TYPE_VIDEO, CODEC_ID_MPEG4, sizeof(MpegEncContext), MPV_encode_init, MPV_encode_picture, …