• any code text to utf8


    # any code text to utf8

    ```shell

    # 记录src_path下所有源文件名,并添加到src_file_list.txt中,以便后面对每一个文件转换编码

    find $src_path -name "*.h" >> src_file_list.txt

    find $src_path -name "*.cpp" >> src_file_list.txt

    #......

    #其他非文本文件 别进行识别和转码,容易损坏文件

    ```

    ```shell

    # 猜测文件的编码类型

    # 因为识别文件编码可能会出错,这一步是最容易影响到编码转换正确率的,这里使用file命令

    file -i $src_file_name

    # 输出示例 to_utf8.cpp: text/x-c; charset=utf-8

    # 输出示例 TextEncoding.exe: application/x-dosexec; charset=binary

    ```

    ```shell

    # 文件编码格式转换

    # 使用iconv命令,将GBK编码的src_file_name文件转为UTF8编码,并将转换后的结果写入$src_file_name".tmp"中

    iconv -f GBK -t UTF-8 -o $src_file_name".tmp" $src_file_name

    # 编码知识科普:数据在计算机存储为大量顺序的0和1,称为二进制,文件也一样。编码指的软件对这个文件的打开方式/解释方式。通常所说的乱码就是打开方式不对导致的[希望你用utf8打开,你却用utf16的解析方式打开,解析出来就是一堆乱码]

    # 举例:我在纸上写了"小人",原意为"卑鄙的人";一个古代人拿到这张纸,他以为我写的意思是"小孩子"。两个人的理解就对不上了。文件-纸;小人-二进制数据;卑鄙的人-uft8解码结果;小孩子-uft16解码结果。当然有一些字词古文和现代文解释出来意思一样。这样的字词不管用哪种方式解释都不会出现歧义/乱码。

    # 编码历史

    # 1:ascii编码:只支持英文字母/数字/少量符号。几乎所有编码方式 来打开 本该以ascii打开的文件 都不会乱码。

    # 2:中国常用编码:GBK,gb2312,能够正确解释中文和英文,其他国文字不行。windows上容易出现。

    # 4:windows常用编码:utf16,utf或者unicode开头的都是国际化编码,及所有人类文字符号都能解释。windows常用。

    # 5:网页常用编码:utf8,国际化,省流量。最好用它。

    # 6:程序内部字符串编码:utf32,国际化,占内存,但是每个字符定长,写代码方便。

    #以上编码是会经常碰到的,当然还有其他更多编码方式。它们互不兼容,各干各的。就算你把 应该用gb2312解码的文本 给 utf8去解码,utf8也能把它解出来显示,但是只要有中文就会被解释错,看上去就是乱码。这也是乱码发生的根因。在已经看到乱码的情况下,又被编辑器以错误(与原码不一致及为错误)的编码方式保存一下,文件就彻底损坏了。经过多次错误,再也没人知道它原来的样子。

    #如果你不想为乱码而烦恼,请把文本全转为utf8吧,它越来越流行了。如果你文本中只有英文,那无所谓用什么编码,因为几乎所有编码方式都能正确解析英文。

    ```

    ```shell

    # UTF8 with BOM

    # 如何识别一个文本文件是什么编码格式?最简单的,以每一种编码方式去打开同一个文件,肉眼去看有没有乱码,如果哪种编码方式打开后没有乱码,就算该文本属于该编码。一个文本字符较少时,可能被识别为既是GBK,又是utf8。或者更多。

    # 所以上述的 file 命令去识别文格式,也会有出错的时候。

    # windows怕自己识别不出UTF8编码的文本,于是自作聪明的在utf8编码的文件开头插入了3个字节长的固定的不可见字符,用来方便识别是不是uft8编码。这3个字节是 "xefxbbxbf" 。开头插入了这3个字节的utf8文本文件,叫做UTF8 with BOM,及UTF8-BOM

    sed -i '1s/^xefxbbxbf//g' $src_file_name #将文件开头的BOM标记替换为空(及删去)

    sed -i '1s/^/xefxbbxbf/g' $src_file_name #将文件开头加上BOM标记

    # 以上是删去和添加BOM标记的方法,建议不使用BOM,很少有编辑器需要它。

    ```

    ```shell

    # 换行

    # 有的字符被解析出来是不可见(如BOM),有的字符被解析出来会感觉很特别,比如' ',编辑器默认会显示4个空格那么宽的空白(当然编辑器可以设置显示2个空白格/8个空白格)。那 换一行再显示 这个特效 用什么字符表示呢?

    # 分歧

    # unix/linux:使用' '表示换行

    # mac os:使用' '表示换行

    # windows:使用' '表示换行。windows真是个和事佬,很中立嘛。

    # 我们当然希望我的项目源文件统一使用同一个换行符了

    tr -d ' ' < $src_file_name > $src_file_name".tmp" #将文件中所有 删了

    ```

    ```shell

    # table ' '

    # python程序员可以略过

    # 源文件中出现' '也是件很繁琐的事情,大段大段的空白,通用做法是将' '替换为几个空格。

    sed -i 's//    /g' $src_file_name #将文件中的换为    。哈哈哈,是不是看不到我写的字符,因为编辑器已经给你处理过了。

    ```

    ```shell

    # 行末空格

    # 如果行末多了几个不可见字符,看也看不到,放在那又导致文件变大了。把它删了吧!

    sed -i 's/    $//g' $src_file_name

    sed -i 's/   $//g' $src_file_name

    sed -i 's/  $//g' $src_file_name

    sed -i 's/ $//g' $src_file_name

    ```

    any code text to utf8

     
     
     
     
    # 记录src_path下所有源文件名,并添加到src_file_list.txt中,以便后面对每一个文件转换编码
    find $src_path -name "*.h" >> src_file_list.txt
    find $src_path -name "*.cpp" >> src_file_list.txt
    #......
    #其他非文本文件 别进行识别和转码,容易损坏文件
     
     
     
     
     
    # 猜测文件的编码类型
    # 因为识别文件编码可能会出错,这一步是最容易影响到编码转换正确率的,这里使用file命令
    file -i $src_file_name
    # 输出示例 to_utf8.cpp: text/x-c; charset=utf-8
    # 输出示例 TextEncoding.exe: application/x-dosexec; charset=binary
     
     
     
     
     
    # 文件编码格式转换
    # 使用iconv命令,将GBK编码的src_file_name文件转为UTF8编码,并将转换后的结果写入$src_file_name".tmp"中
    iconv -f GBK -t UTF-8 -o $src_file_name".tmp" $src_file_name
    # 编码知识科普:数据在计算机存储为大量顺序的0和1,称为二进制,文件也一样。编码指的软件对这个文件的打开方式/解释方式。通常所说的乱码就是打开方式不对导致的[希望你用utf8打开,你却用utf16的解析方式打开,解析出来就是一堆乱码]
    # 举例:我在纸上写了"小人",原意为"卑鄙的人";一个古代人拿到这张纸,他以为我写的意思是"小孩子"。两个人的理解就对不上了。文件-纸;小人-二进制数据;卑鄙的人-uft8解码结果;小孩子-uft16解码结果。当然有一些字词古文和现代文解释出来意思一样。这样的字词不管用哪种方式解释都不会出现歧义/乱码。
    # 编码历史
    # 1:ascii编码:只支持英文字母/数字/少量符号。几乎所有编码方式 来打开 本该以ascii打开的文件 都不会乱码。
    # 2:中国常用编码:GBK,gb2312,能够正确解释中文和英文,其他国文字不行。windows上容易出现。
    # 4:windows常用编码:utf16,utf或者unicode开头的都是国际化编码,及所有人类文字符号都能解释。windows常用。
    # 5:网页常用编码:utf8,国际化,省流量。最好用它。
    # 6:程序内部字符串编码:utf32,国际化,占内存,但是每个字符定长,写代码方便。
    #以上编码是会经常碰到的,当然还有其他更多编码方式。它们互不兼容,各干各的。就算你把 应该用gb2312解码的文本 给 utf8去解码,utf8也能把它解出来显示,但是只要有中文就会被解释错,看上去就是乱码。这也是乱码发生的根因。在已经看到乱码的情况下,又被编辑器以错误(与原码不一致及为错误)的编码方式保存一下,文件就彻底损坏了。经过多次错误,再也没人知道它原来的样子。
    #如果你不想为乱码而烦恼,请把文本全转为utf8吧,它越来越流行了。如果你文本中只有英文,那无所谓用什么编码,因为几乎所有编码方式都能正确解析英文。
     
     
     
     
     
    # UTF8 with BOM
    # 如何识别一个文本文件是什么编码格式?最简单的,以每一种编码方式去打开同一个文件,肉眼去看有没有乱码,如果哪种编码方式打开后没有乱码,就算该文本属于该编码。一个文本字符较少时,可能被识别为既是GBK,又是utf8。或者更多。
    # 所以上述的 file 命令去识别文格式,也会有出错的时候。
    # windows怕自己识别不出UTF8编码的文本,于是自作聪明的在utf8编码的文件开头插入了3个字节长的固定的不可见字符,用来方便识别是不是uft8编码。这3个字节是 "xefxbbxbf" 。开头插入了这3个字节的utf8文本文件,叫做UTF8 with BOM,及UTF8-BOM
    sed -i '1s/^xefxbbxbf//g' $src_file_name #将文件开头的BOM标记替换为空(及删去)
    sed -i '1s/^/xefxbbxbf/g' $src_file_name #将文件开头加上BOM标记
    # 以上是删去和添加BOM标记的方法,建议不使用BOM,很少有编辑器需要它。
     
     
     
     
     
    # 换行
    # 有的字符被解析出来是不可见(如BOM),有的字符被解析出来会感觉很特别,比如'	',编辑器默认会显示4个空格那么宽的空白(当然编辑器可以设置显示2个空白格/8个空白格)。那 换一行再显示 这个特效 用什么字符表示呢?
    # 分歧
    # unix/linux:使用'
    '表示换行
    # mac os:使用'
    '表示换行
    # windows:使用'
    '表示换行。windows真是个和事佬,很中立嘛。
    # 我们当然希望我的项目源文件统一使用同一个换行符了
    tr -d '
    ' < $src_file_name > $src_file_name".tmp" #将文件中所有
    删了
     
     
     
     
     
    # table '	'
    # python程序员可以略过
    # 源文件中出现'	'也是件很繁琐的事情,大段大段的空白,通用做法是将'	'替换为几个空格。
    sed -i 's//    /g' $src_file_name #将文件中的换为    。哈哈哈,是不是看不到我写的字符,因为编辑器已经给你处理过了。
     
     
     
     
     
    # 行末空格
    # 如果行末多了几个不可见字符,看也看不到,放在那又导致文件变大了。把它删了吧!
    sed -i 's/    $//g' $src_file_name
    sed -i 's/   $//g' $src_file_name
    sed -i 's/  $//g' $src_file_name
    sed -i 's/ $//g' $src_file_name
     

     

  • 相关阅读:
    26.Qt Quick QML-RotationAnimation、PathAnimation、SmoothedAnimation、Behavior、PauseAnimation、SequentialAnimation和ParallelAnimation
    25.Qt Quick QML-Animation、PropertyAnimation、NumberAnimation、ColorAnimation
    25.Qt Quick QML-500行代码实现"合成大西瓜游戏"
    24.Qt Quick QML-Canvas和Context2D详解
    23.Qt Quick QML-400行实现一个好看的图片浏览器-支持多个图片浏览、缩放、旋转、滑轮切换图片
    22.Quick QML-FolderListModel模型
    21.Quick QML-FileDialog、FolderDialog对话框
    20.Quick QML-Flickable滑动窗口
    19.Quick QML-GroupBox自定义
    18.Quick QML-ComboBox
  • 原文地址:https://www.cnblogs.com/xjjsk/p/13043116.html
Copyright © 2020-2023  润新知