Linux下文件字元編碼格式檢測和轉換

来源:https://www.cnblogs.com/mithrilon/archive/2018/06/03/9082449.html
-Advertisement-
Play Games

目前多數情況下, 我們遇到的非英文字元文件都是使用UTF 8編碼的, 這時一般我們查看這些文件的內容都不會有問題. 不過有時, 我們有可能會遇到非UTF 8編碼的文件, 比如中文的GBK編碼, 或者俄語的CP1251編碼. 而文本文件一般不帶有自身編碼格式的信息, 這就給我們處理帶來很多麻煩. 本文 ...


目前多數情況下, 我們遇到的非英文字元文件都是使用UTF-8編碼的, 這時一般我們查看這些文件的內容都不會有問題. 不過有時, 我們有可能會遇到非UTF-8編碼的文件, 比如中文的GBK編碼, 或者俄語的CP1251編碼. 而文本文件一般不帶有自身編碼格式的信息, 這就給我們處理帶來很多麻煩. 本文介紹幾個Linux命令來檢測和轉換文本文件的編碼格式.

檢測文件編碼格式

enca 命令名是Extremely Naive Charset Analyser的縮寫, 從它這個賣萌的名字來看, 應該可以用來檢測文件的編碼格式.

安裝 enca

在Ubuntu下, 可以使用以下命令安裝

apt-get install enca

使用方式

它最簡單的使用方式如下:

# enca test.txt
Simplified Chinese National Standard; GB2312

上面的test.txt是一個含有中文GB2312編碼的文本文件. 根據 enca 的文檔, 當我們運氣好的時候, 就可以按照上面不添加任何額外參數的情況下, 檢測出文件的編碼格式. 而就我的經驗來看, Linux的語言設置是一個影響運氣的因素. 上面的操作在預設語言為中文的Linux中, 行為就會如同上面給出的結果正確的檢測出文件的中文編碼格式. 而當LInux預設為英文時, 運氣就不會那麼好了.

# enca test.txt
enca: Cannot determine (or understand) your language preferences.
Please use `-L language', or `-L none' if your language is not supported
(only a few multibyte encodings can be recognized then).
Run `enca --list languages' to get a list of supported languages.

根據 enca 的錯誤提示, 我們需要給它提供-L參數來限定需要檢測的文件語言.

首先, 我們需要看看當前系統下 enca 支持的語言和對應的編碼類型:

# enca --list languages
belarusian: CP1251 IBM866 ISO-8859-5 KOI8-UNI maccyr IBM855 KOI8-U
 bulgarian: CP1251 ISO-8859-5 IBM855 maccyr ECMA-113
     czech: ISO-8859-2 CP1250 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK
  estonian: ISO-8859-4 CP1257 IBM775 ISO-8859-13 macce baltic
  croatian: CP1250 ISO-8859-2 IBM852 macce CORK
 hungarian: ISO-8859-2 CP1250 IBM852 macce CORK
lithuanian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic
   latvian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic
    polish: ISO-8859-2 CP1250 IBM852 macce ISO-8859-13 ISO-8859-16 baltic CORK
   russian: KOI8-R CP1251 ISO-8859-5 IBM866 maccyr
    slovak: CP1250 ISO-8859-2 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK
   slovene: ISO-8859-2 CP1250 IBM852 macce CORK
 ukrainian: CP1251 IBM855 ISO-8859-5 CP1125 KOI8-U maccyr
   chinese: GBK BIG5 HZ
      none:

在我的測試環境中, enca 支持以上的語言和編碼. 可以看到中文是chinese: GBK BIG5 HZ, 於是, 我們可以嘗試以下參數組合:

# enca -L chinese test.txt
Simplified Chinese National Standard; GB2312

這時, enca 給出了一個明確的答案.

預設情況下, enca 給出的是人可讀的編碼格式名, 比如上面的 Simplified Chinese National Standard; GB2312. 而有時, 我們會希望給出的結果給其他命令或者程式使用, 比如, 我們希望結合 iconv 命令來轉換文件編碼, 可以添加-i來讓 enca 給出相應的程式可用編碼名:

# enca -i -L chinese test.txt
GBK

轉換文件編碼格式

在知道了文件的正確編碼格式之後, 我們往往會希望將文件轉換為UTF8之類常用或者系統預設支持的編碼格式, 以便後續進一步處理.

使用 enca 進行轉換

當我們給 enca 命令添加-x參數時, enca 命令就會將文件轉換為-x參數指定的編碼格式:

# enca -L chinese test.txt
Simplified Chinese National Standard; GB2312
# enca -x UTF8 -L chinese test.txt
# enca -L chinese test.txt
Universal transformation format 8 bits; UTF-8

可以看到, 在執行enca -x UTF8 -L chinese test.txt命令後, 文件 test.txt 的編碼從GB2312轉換為了UTF8. 註意 , enca 命令會將源文件覆蓋, 所以使用這個命令時, 要註意備份源文件.

使用 iconv 進行轉換

iconv 是*nix系統里的轉換字元編碼的標準命令和API. 如果我們希望將一個GBK編碼的文件轉換為UTF8編碼, 可以以以下方式使用 iconv 命令:

# iconv -f GBK -t UTF8 test.txt

其中test.txt是要被轉換的文件, -f GBK參數表示源文件的編碼是GBK, -t UTF8則表示要轉換的目標編碼. 執行以上命令後, iconv 命令會將轉換後的文件內容列印到標準輸出.

如果希望將轉換後的內容保存到文件, 可以添加-o參數:

    # iconv -f GBK -t UTF8 -o test_converted.txt test.txt 

這個命令就會將轉換後的內容自動保存到 test_converted.txt 文件.

通過 iconv -l則可以查看所有的字元集名稱. 前文也提到enca -i則可以用來輸出 iconv 可用的文件編碼名.

參考資料


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 以下是 基類 Form1 // 委托、事件是 public 和全局的 public delegate void ButtonClickdHandle(object sender, EventArgs e);//定義委托 public event ButtonClickdHandle UserCont ...
  • 轉發請註明出處:https://www.cnblogs.com/zhiyong-ITNote/p/9127001.html 實在沒有找到Unity容器的AOP應用程式示例的說明,在微軟官網找到了教程(https://docs.microsoft.com/zh-cn/previous-versions ...
  • 在接下來的這篇文章中,我將向大家介紹.NET中的線程API,怎麼樣用C#創建線程,啟動和停止線程,設置優先順序和狀態.在.NET中編寫的程式將被自動的分配一個線程.讓我們來看看用C#編程語言創建線程並且繼續學習線程的知識。我們都知道.NET的運行時環境的主線程由Main ()方法來啟動應用程式,而且. ...
  • 講一下echarts的用法,列舉了兩個圖表,一個是單柱圖,一個是多柱圖,至於餅狀圖,只許更改echarts的類型就好了 一、首先是要兩個div,用來存放兩個圖表 二、需要用js從後臺獲取json數據(可以從cs頁面獲取,也可以通過一般處理程式,這裡用的一般處理程式) <%--單個柱狀圖--%> <s ...
  • mvc_study StudyStartup Program code explain construction 即若需要使用startup的有參構造,則需要在configureappconfiguration中進行配置相應處理類 請求走向: 初始:Run --> ConfigureServices ...
  • MATLAB是美國MathWorks公司出品的商業數學軟體,主要用於演算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和互動式環境,是一款優秀而又強大的數學軟體。 本文基於 Deepin 15.5 進行 MATLAB2016b 的安裝,其他操作系統及 MATLAB 版本類似。 一、下載“C ...
  • ### 這幾天開始搗鼓lnmp的環境搭建,很多東西還是得自己去經歷,才會印象深刻,有所體會,有所收穫與成長! 但是,偶爾會遇到一些意想不到問題! Xshell ,Xftp 遠程連接的時候出現中文亂碼的問題! ### 1. Xshell 顯示中文亂碼問題解決: 在工具欄 -- 文件 -- 屬性(alt ...
  • 最近進的公司是一個做路由器的。。很多嵌入式工程師。有個項目( 智能空調控制)是跟嵌入式工程師對接,我做APP+PHP。。他做伺服器。我們用MQTT(由於emqtt是用erlang寫的,所以我也學了點erlang,後期有時間分享一下,這個語言很好,很強大。特別抽象)。這個項目激發了我對嵌入式的興趣,於 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...