UTF-8带BOM和不带BOM的转换
UTF-8帶BOM和不帶BOM的轉換
標簽:Linux UTF-8 BOM
【問題】
在linux下如果你使用過的編碼不是utf-8你可以使用enca進行轉換,然而轉換過后的情況是不帶bom的uft-8,在windos下我們的編譯器采用了msvc2015,而msvc2015不能很好的識別不帶bom的utf-8,搞得每次都得使用notepad++打開然后再進行編碼轉換,可是文件千千萬萬個...
【分析問題】
根據上面的情況,我們可以將這個問題分為兩個子問題進行解決:
問題1.UTF-8帶BOM和不帶BOM有什么區別?
問題2.UTF-8帶BOM和不帶BOM的轉化?
【解決-問題1:UTF-8帶BOM和不帶BOM有什么區別?】
(1)打開notepad++,輸入123
(2)菜單欄選擇 編碼-轉為UTF-8無BOM編碼格式并進行保存
(3)菜單欄選擇 插件-HEX-Editor-view in HEX (關于插件HEX-Editor的安裝可以直接使用插件管理進行安裝,unix下面可以直接使用xxd查看)
(4)可以看到
(5)退出view in HEX
(6)菜單欄選擇 編碼-轉為UTF-8編碼格式并進行保存
(7)重復步驟(3)(4)可以看到
Ok,這就知道它們在編碼的區別了,理論上的區別呢? 請進行移步到:https://en.wikipedia.org/wiki/Byte_order_mark 進行查看.
【解決-UTF-8帶BOM和不帶BOM的轉化?】
廢話不多說,利用Linux(筆者此處測試的環境為:Ubuntu12.04)的主要代碼如下:
#clear bom sed -i '1s/^\xef\xbb\xbf//' “$你的輸入文件,如:mian.cpp”#add bom sed -I '1s/^/\xef\xbb\xbf&/' “$你的輸入文件,如:mian.cpp”筆者為了處理一個文件夾下面的代碼源文件(.cpp,.h)用了一個函數,當然你也可以直接使用find.
完整代碼如下:
#!/bin/bash add_bom() {for i in `ls $1`docurrent_path=$1/$iif [ -d $current_path ] thenchange_code $current_pathelseif [ "${current_path##*.}" = "cpp" ] || [ "${current_path##*.}" = "h" ];then#clear bomsed -i '1s/^\xef\xbb\xbf//' $current_path#add bomsed -I '1s/^/\xef\xbb\xbf&/' $current_pathfifidone }current=`pwd` add_bom $current至此完成,關于直接采用find,待后續有需要再進行補充吧。
轉載于:https://www.cnblogs.com/hejianglin/p/6683074.html
總結
以上是生活随笔為你收集整理的UTF-8带BOM和不带BOM的转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯-组素数-java
- 下一篇: Android(组件大全)