UTF-8带BOM和不带BOM的转换
UTF-8帶BOM和不帶BOM的轉(zhuǎn)換
標(biāo)簽:Linux UTF-8 BOM
【問題】
在linux下如果你使用過的編碼不是utf-8你可以使用enca進(jìn)行轉(zhuǎn)換,然而轉(zhuǎn)換過后的情況是不帶bom的uft-8,在windos下我們的編譯器采用了msvc2015,而msvc2015不能很好的識(shí)別不帶bom的utf-8,搞得每次都得使用notepad++打開然后再進(jìn)行編碼轉(zhuǎn)換,可是文件千千萬萬個(gè)...
【分析問題】
根據(jù)上面的情況,我們可以將這個(gè)問題分為兩個(gè)子問題進(jìn)行解決:
問題1.UTF-8帶BOM和不帶BOM有什么區(qū)別?
問題2.UTF-8帶BOM和不帶BOM的轉(zhuǎn)化?
【解決-問題1:UTF-8帶BOM和不帶BOM有什么區(qū)別?】
(1)打開notepad++,輸入123
(2)菜單欄選擇 編碼-轉(zhuǎn)為UTF-8無BOM編碼格式并進(jìn)行保存
(3)菜單欄選擇 插件-HEX-Editor-view in HEX (關(guān)于插件HEX-Editor的安裝可以直接使用插件管理進(jìn)行安裝,unix下面可以直接使用xxd查看)
(4)可以看到
(5)退出view in HEX
(6)菜單欄選擇 編碼-轉(zhuǎn)為UTF-8編碼格式并進(jìn)行保存
(7)重復(fù)步驟(3)(4)可以看到
Ok,這就知道它們?cè)诰幋a的區(qū)別了,理論上的區(qū)別呢? 請(qǐng)進(jìn)行移步到:https://en.wikipedia.org/wiki/Byte_order_mark 進(jìn)行查看.
【解決-UTF-8帶BOM和不帶BOM的轉(zhuǎn)化?】
廢話不多說,利用Linux(筆者此處測(cè)試的環(huán)境為:Ubuntu12.04)的主要代碼如下:
#clear bom sed -i '1s/^\xef\xbb\xbf//' “$你的輸入文件,如:mian.cpp”#add bom sed -I '1s/^/\xef\xbb\xbf&/' “$你的輸入文件,如:mian.cpp”筆者為了處理一個(gè)文件夾下面的代碼源文件(.cpp,.h)用了一個(gè)函數(shù),當(dāng)然你也可以直接使用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至此完成,關(guān)于直接采用find,待后續(xù)有需要再進(jìn)行補(bǔ)充吧。
轉(zhuǎn)載于:https://www.cnblogs.com/hejianglin/p/6683074.html
總結(jié)
以上是生活随笔為你收集整理的UTF-8带BOM和不带BOM的转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯-组素数-java
- 下一篇: SPRING CLOUD服务网关之ZUU