(gbk linux)
linux怎么看文本的編碼格式?
linux下經常遇到的編碼問題如果你需要在linux中操作windows下的文件,那么你可能會經常遇到文件編碼轉換的問題。windows中默認的文件格式是gbk(gb2312),而linux一般都是utf-8。
查看編碼的方法
方法一:filefilename
方法二:在vim中可以直接查看文件編碼
:setfileencoding
如果你只是想查看其它編碼格式的文件或者想解決用vim查看文件亂碼的問題,那么你可以在
~/.vimrc文件中添加以下內容:
setencoding=utf-8fileencodings=ucs-bom,utf-8,cp936
這樣,就可以讓vim自動識別文件編碼(可以自動識別utf-8或者gbk編碼的文件),其實就是依照fileencodings提供的編碼列表嘗試,如果沒有找到合適的編碼,就用latin-1(ascii)編碼打開
文件編碼轉換
多平臺方法:
iconv提供標準的程序和api來進行編碼轉換;
convert_encoding.py基于python的文本文件轉換工具;
decodeh.py提供算法和模塊來談測字符的編碼;
linux下文件編碼轉換:
方法一:
在vim中直接進行轉換文件編碼,比如將一個文件轉換成utf-8格式
:setfileencoding=utf-8
或者
11)設置文件集合,即要對哪些文件進行操作,可以使用通配符,比如我通常是對c/c++源程序進行編碼轉換
:args*.h*.cpp
2)給出要在每個文件上執行的命令,這里是轉換編碼:
:argdosetfenc=utf-8|update
方法二:
iconv轉換
5.案例:
假如說我們將windows下的一個utf-8的文件傳到linux環境下,linux環境下的系統編碼是gb18030,我們cat的時候就會出現亂碼,這個時候就應該想到轉碼了,下面我們來進行試驗:
我們將windows下一個名為utf-8.sh的文件傳到linux系統中,其中utf-8.sh的內容如下:
我是中文編碼utf-8模式~
而linux系統的系統語言設置為:
#cat/etc/sysconfig/i18n
lang=zh_cn.gb18030
sysfont="latarcyrheb-sun16"
這個時候查看一下文件的內容及編碼:
#fileutf-8.sh
utf-8.sh:utf-8unicodetext,withnolineterminators
#catutf-8.sh
锘挎垜鏄?腑鏂囩紪鐮乁tf-8妯″紡~#
#
這個時候我們就需要轉換編碼了,記得使用iconv
#iconv-futf-8-tgb18030utf-8.sh-ogb18030.sh
#catgb18030.sh
??我是中文編碼utf-8模式~#
#filegb18030.sh
gb18030.sh:non-isoextended-asciitext,withnolineterminators
#
convmv就是更改文件名編碼方式的一個工具。
比如
sudoconvmv-fgbk-tutf-8-r–notest/home
就是將/home目錄下原來文件名是gbk編碼方式的全部改為utf-8格式的。這里-f后面為原來的編碼方式,-t后面是要更改為的編碼方式,-r表示這個目錄下面的所有文件,–notest表示馬上執行,而不是僅僅測試而已。另外這命令好像要root才能執行,因此要加上sudo。
linux下怎么查看文件的編碼方式?
一,查看文件編碼:在Linux中查看文件編碼可以通過以下幾種方式:
1.在Vim中可以直接查看文件編碼:set fileencoding即可顯示文件編碼格式。如果你只是想查看其它編碼格式的文件或者想解決用Vim查看文件亂碼的問題,那么你可以在~/.vimrc 文件中添加以下內容:set encoding=utf-8fileencodings=ucs-bom,utf-8,cp936這樣,就可以讓vim自動識別文件編碼(可以自動識別UTF-8或者GBK編碼的文件),其實就是依照 fileencodings提供的編碼列表嘗試,如果沒有找到合適的編碼,就用latin-1(ASCII)編碼打開。
2. enca (如果你的系統中沒有安裝這個命令,可以用sudo yum install -y enca 安裝 )查看文件編碼$ enca filenamefilename: Universal transformation format 8 bits; UTF-8CRLF line terminators需要說明一點的是,enca對某些GBK編碼的文件識別的不是很好,識別時會出現:Unrecognized encoding
char類型怎么轉換為string?
C++11的std::wstring_convert配合std::codecvt模板類完全可以解決這個問題,不會出現
@vczh
所說修改了全局locale會導致污染其他庫的問題。
這兩個模板類的功能是:
std::wstring_convert:轉碼器,接收一個類似codecvt描述編碼轉換特性的模板參數,用于將本地化的寬字符wstring和指定編碼的字節化string進行互轉。
std::codecvt:編碼轉換特性類,用在wstring_convert的模板參數中來指定使用哪種編碼。
所以編碼A和B互轉的實現方式就是:借助本地化寬字符串,先將以A編碼的string轉為本地化的wstring,再將本地化的wstring轉為B編碼后的string。
codecvt一般使用下面兩個特化子類:
std::codecvt_utf8<wchar_t>:用于UTF8和本地化wchar_t的互轉
std::codecvt_byname<wchat_t, char, std::mbstate_t>:用于其他編碼(例如GBK)和本地化wchar_t的互轉,類的構造函數需要傳入編碼的locale name,由于編碼的locale name是操作系統決定的(例如GBK在linux下的locale名可能是"zh_CN.GBK",而windows下是".936"),因此做跨平臺的話仍然要給不同的系統做適配。
這里給一個windows下,GBK string轉UTF8 string的例子:首先將GBK string轉wstring
再將wstring轉為UTF8 string轉碼就完成了。utf8_str里的內容應該是"xE7x83xAB"(燙的UTF8)。
linux怎么看文件的字符集編碼?
可以在命令行執行file命令查看返回信息以便確認文件的字符集編碼。
格式:file 文件名
例如:
# file ABC.log
ABC.log: UTF-8 Unicode text
從結果看該文件是utf-8格式
# file word.txt
word.txt: ASCII text從結果看該文件是gbk格式
如果不符合要求,可以通過iconv命令更改文件格式。
總結
以上是生活随笔為你收集整理的(gbk linux)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea如何把包变为模块_让我们将包变成
- 下一篇: 预拌砂浆备案证(预拌砂浆备案)