其實很長一段時間都受到字符集和字元編碼的困擾,有時候一些概念性的東西,還有編碼過程中沒有一些需要注意的地方沒有及時注意,所以常常會造成一些困擾,亂碼問題對於困擾了相當一部分人,整理下初步的知識,對自己和別人能有一些幫助。
1).首先先了解下概念性的東西,編碼,字元,字符集,字元編碼
編碼是資訊從一種形式或格式轉換為另一種形式的過程也稱為計算機程式語言的**簡稱編碼。用預先規定的方法將文字、數字或其它物件編成數碼,或將資訊、資料轉換成規定的電脈衝訊號。編碼在電子計算機、電視、遙控和通訊等方面廣泛使用。編碼是資訊從一種形式或格式轉換為另一種形式的過程。解碼,是編碼的逆過程。
字元是指計算機中使用的字母、數字、字和符號,包括:1、2、3、a、b、c、~!·#¥%……—*()——+等等。是一種帶替意思的字元。
字符集(character)是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。字符集(character set)是多個字元的集合,字符集種類較多,每個字符集包含的字元個數不同,常見字符集名稱:ascii字符集、gb2312字符集、big5字符集、 gb18030字符集、unicode字符集等。計算機要準確的處理各種字符集文字,需要進行字元編碼,以便計算機能夠識別和儲存各種文字。中文文字數目大,而且還分為簡體中文和正體中文兩種不同書寫規則的文字,而計算機最初是按英語單位元組字元設計的,因此,對中文字元進行編碼,是中文資訊交流的技術基礎。
字元編碼(英語:character encoding)也稱字集碼,是把字符集中的字元編碼為指定集合中某一物件(例如:位元模式、自然數序列、8位組或者電脈衝),以便文字在計算機中儲存和通過通訊網路的傳遞。常見的例子包括將拉丁字母表編碼成摩斯電碼和ascii。其中,ascii將字母、數字和其它符號編號,並用7位元的二進位制來表示這個整數。通常會額外使用乙個擴充的位元,以便於以1個位元組的方式儲存。
2).日常編碼中常見的gbk,utf-8,iso-8859-1是不同型別的編碼,不同的字符集對於同乙個編碼的解釋不同,一種編碼可以對應不同的字符集。
3). 亂碼的常見原因
.日常開發中會面臨解碼(讀取過程)、編碼(寫入過程),編碼和解碼過程中如果設定的字符集不同勢必會造成亂碼的問題,這也是造成亂碼的乙個重要原因。
4).一些環境的預設編碼
wind預設的編碼是gbk,基本上不用考慮這方面的影響,而且是無法修改的,ecplise預設的也是gbk
linux預設編碼是utf-8,mariadb預設的編碼則是is0-8859-1
在編碼過程中如果沒有設定編碼方式的情況下,編碼和解碼會根據環境的編碼方式及行編碼和解碼
例如:在linux下,編碼和解碼過程不設定編碼方式的話,會預設使用linux預設的utf-8來進行編碼和解碼
在linux檢視編碼方式:
locale
lang="en_us.utf-8"
sysfont="latarcyrheb-sun16"
修改:vi /etc/sysconfig/i18n下新增如果下
export lc_all="zh_cn.gbk"
export lang="zh_cn.gbk"
也可以修改配置檔案 vi /etc/sysconfig/i18n
字元:系統環境變數修改時要慎重加設定
5).mariadb的編碼認識
1.檢視方式
show variables like "%character%";show variables like "%collation%";
show variables like "%character%";show variables like "%collation%";
2.修改:
/etc/mysql/my.cnf
[mysqld] init_connect='set collation_connection = utf8_unicode_ci' init_connect='set names utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake
mysqld] init_connect='set collation_connection = utf8_unicode_ci' init_connect='set names utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake
[client]
client]default-character-set=utf8
[mysql]
default-character-set=utf8
default-character-set=utf8
[mysql]
default-character-set=utf8
修改後重啟服務生效。
修改後重啟服務生效。
3.set character_set_server = 'utf8';這種設定方法的話只是修改當前會話的編碼方式,不是永久性設定。
character_set_server = 'utf8';這種設定方法的話只是修改當前會話的編碼方式,不是永久性設定。
字符集與字元編碼
字符集 字符集是各種文字和符號的總稱,也就是多個字元的集合,而常見的字符集有 ascii字符集 iso 8859字符集 gb 2312字符集 big 5字符集 gbi 8030字符集 unicode字符集等。計算機要能夠識別和儲存各種字元,就要對各種字符集進行字元編碼。字元編碼 編碼和字符集不同,字...
字符集與字元編碼
字符集 charset 是乙個系統支援的所有抽象字元的集合。字元是各種文字和符號的總稱,包括各國家文字 標點符號 圖形符號 數字等。常用字符集 ascii 英語字符集,1位元組,前127是英文 數字,127 255是特殊符號 gb x gb2312,gb18030 字符集,2位元組,包含ascii前...
字符集與字元編碼
目錄 字符集和字元編碼 unicode字符集 utf 8 utf 16 ascii碼 中文字符集 gbk gb2312 gb18030 字符集 字符集只是乙個規則集合的名字,字符集 字型檔表 character repertoire 編碼字符集 coded character set 字元編碼 ch...