精华内容
下载资源
问答
  • 彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)

    万次阅读 多人点赞 2014-02-15 16:46:22
    默认编码:System(简体中文windows系统默认指的是GBK编码,即下拉框选项里的GBK/windows-936-2000/CP936/MS936/windows-936) 二、编码知识科普 Qt常见的两种编码是:UTF-8和GBK ★UTF-8:Unicode Transformat

    尊重作者,支持原创,如需转载,请附上原地址:https://blog.csdn.net/libaineu2004/article/details/19245205

    这篇文章有点长,内容有点多,如果时间急迫,可以直接翻页去末尾看结论。红色字体加粗的。(#^.^#)

     

    一、Qt Creator环境设置

    1、cpp或h文件从window上传到Ubuntu后会显示乱码,原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK.

    我们使用的Windows系统本地字符集编码为GBK。

    2、Windows环境下,Qt Creator,菜单->工具->选项->文本编辑器->行为->文件编码->默认编码,常用的选项有以下几个:

    System(简体中文windows系统默认指的是GBK编码)

    GBK/windows-936-2000/CP936/MS936/windows-936

    UTF-8

     

    二、编码知识科普

    Qt常见的两种编码是:UTF-8和GBK
    ★UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。
    ★GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。GBK是GB2312的扩展,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名。
    ★GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
    GBK、GB2312--Unicode--UTF8
    UTF8--Unicode--GBK、GB2312
    ★在简体中文windows系统下,ANSI编码代表GBK/GB2312编码,ANSI通常使用0x80~0xFF范围的2个字节来表示1个中文字符。0x00~0x7F之间的字符,依旧是1个字节代表1个字符。Unicode(UTF-16)编码则所有字符都用2个字节表示。

     

    三、编码转换

    Windows自带的记事本,无法查看UTF-8编码的文件到底有无BOM,需要使用其他文件编辑器,比如EditPlus或者SublimeText。
    UTF-8与ANSI(即GBK)的互转,可以使用EditPlus工具"文件另存为"或者Encodersoft编码转换工具对.cpp和.h源文件文本进行批量转换.

     

    四、QString显示中文乱码的原因

    我们使用的Windows系统本地字符编码(Local字符集)为GBK。编译器分析出源文件字符编码之后,会进行解码再编码,将源字符集转码成执行字符集。执行字符集一般默认为使用本地字符编码(Local字符集)。

    Qt5可以设置Local字符集,GBK/UTF-8

    QTextCodec *codec = QTextCodec::codecForName("UTF-8");//或者"GBK",不分大小写
    QTextCodec::setCodecForLocale(codec);

    Qt5中QString内部采用unicode字符集,utf-16编码。构造函数QString::QString(const char *str)默认使用fromUtf8(),将str所指的执行字符集从utf-8转码成utf-16。
    由上面fromUtf8()可知,QString需要执行字符集编码为utf-8,然后以utf-8进行解码,再编码为utf-16才能获得正确的字符编码。显示中文乱码的原因其实就是QString转码方式与执行字符集不一致。(比如,源字符集为本地字符集GBK编码,QString以utf-8的方式进行解码,会导致获得错误的二进制编码,再将错误二进制转为utf-16就会出现乱码。)
     

    五、Qt编码指定

    Qt需要在main()函数指定使用的字符编码:

    #include <QTextCodec>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        //设置中文字体  
        a.setFont(QFont("Microsoft Yahei", 9));
    
        //设置中文编码
    #if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
    #if _MSC_VER
        QTextCodec *codec = QTextCodec::codecForName("GBK");
    #else
        QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    #endif
        QTextCodec::setCodecForLocale(codec);
        QTextCodec::setCodecForCStrings(codec);
        QTextCodec::setCodecForTr(codec);
    #else
        QTextCodec *codec = QTextCodec::codecForName("UTF-8");
        QTextCodec::setCodecForLocale(codec);
    #endif
    
        return a.exec();
    }

    这里只列举大家最常用的3个编译器(微软VC++的cl编译器,Mingw中的g++,Linux下的g++),源代码分别采用GBK和无BOM的UTF-8以及有BOM的UTF-8这3种编码进行保存,发生的现象如下表所示。

    情况1:指的是Local字符集为GBK

    情况2:指的是Local字符集为UTF-8

    • 源代码的编码

      编译器

      显示正常

      显示乱码

      GBK

      win vs cl

      情况1

      情况2

      win mingw-g++

      情况1

      情况2

      linux g++

      情况1

      情况2

      UTF-8(无BOM)

      win vs cl

      编译失败

      error C2001: 常量中有换行符

      编译失败
      error C2001: 常量中有换行符

      win mingw-g++

      情况2

      情况1

      linux g++

      情况2

      情况1

      UTF-8(有BOM)

      win vs cl

      情况1

      情况2(有#pragma预处理)

      情况2(没有#pragma预处理)

      win mingw-g++

      情况2

      情况1

      linux g++

      情况2

      情况1
    • 如果您使用的是Visual C++编译器,则默认情况下不会将您的源代码视为utf-8编码。除非有BOM,否则它将使用您当前的代码页进行解释。就是说,当使用Visual C++编译程序的时候,它会分析源文件采用何种编码,有BOM标识符则可以正确识别其编码是UTF-8,若没有BOM标识符则认为其使用本地字符集编码(Local字符集)。Local字符集是什么?取决于你的设置QTextCodec *codec = QTextCodec::codecForName(???);
    • 如果源文件是UTF-8+BOM的编码方式,还需要在头文件加入
    #if defined(_MSC_VER) && (_MSC_VER >= 1600)    
    # pragma execution_character_set("utf-8")    
    #endif

    或者添加QMAKE_CXXFLAGS += /utf-8到您的.pro文件中。

    • 如果源文件是UTF-8+无BOM的编码方式,则一定不能加#pragma execution_character_set(“utf-8”),不然会产生乱码。

     

    六、测试案例

    案例1、中文字符串测试

    #if defined(_MSC_VER) && (_MSC_VER >= 1600)    
    # pragma execution_character_set("utf-8")    
    #endif
    
    #include <QApplication>
    #include <QTextCodec>
    #include <QPushButton>
    #include <QDebug>
    #include <QString>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        //设置中文字体  
        a.setFont(QFont("Microsoft Yahei", 9));
    
        //设置中文编码
    #if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
    #if _MSC_VER
        QTextCodec *codec = QTextCodec::codecForName("gbk");
    #else
        QTextCodec *codec = QTextCodec::codecForName("utf-8");
    #endif
        QTextCodec::setCodecForLocale(codec);
        QTextCodec::setCodecForCStrings(codec);
        QTextCodec::setCodecForTr(codec);
    #else
        QTextCodec *codec = QTextCodec::codecForName("utf-8");
        QTextCodec::setCodecForLocale(codec);
    #endif
    
        QString str(QObject::tr("1中文"));
        qDebug() << str;
        qDebug() << QStringLiteral("2中文");
        qDebug() << QString::fromLatin1("3中文");
        qDebug() << QString::fromLocal8Bit("4中文");
        qDebug() << QString::fromUtf8("5中文");
        qDebug() << QString::fromWCharArray(L"6中文");
    
        return a.exec();
    }

    当QTextCodec::codecForName("utf-8");时,

    QString::fromLocal8Bit和QString::fromUtf8是等效的。

    当QTextCodec::codecForName("gbk");时,

    QString::fromLocal8Bit和QString::fromUtf8是不等效的。

    案例2、QCom跨平台串口调试助手(http://www.qter.org/?page_id=203)
    源代码qcom\mainwindow.cpp,aboutdialog.cpp等文件用的是UTF-8编码(无BOM);但是qcom\qextserial\*.*文件用的是ANSI编码.在linux环境编译完全OK.
    笔者Windows环境的Qt Creator+微软VC++编译器,环境设置用的是ANSI(即GBK)编码.编译源文件会报错.
    错误提示"fatal error C1018: 意外的 #elif".


    解决方法由两种:

    方法1:

    把qcom\的所有cpp和h文件都用工具转换成ANSI编码,main()函数使用QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

    方法2:

    先把Qt Creator环境设置用的是UTF-8编码,

    再把qcom\的所有cpp和h文件都用工具转换成UTF-8+BOM编码,请注意,如果文件转换成UTF-8(无BOM),编译仍会失败.main()函数使用QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));//注意,此处仍是"GBK",不是"UTF-8"
    重新编译,OK!

    其它:

     

    七、结论

    Windows环境下,Qt Creator+微软VC++编译器,新建工程,

    1、如果该工程不需要跨平台使用(只在win),那么工程设置请使用GBK的编码方式.

    2、如果该工程要跨平台使用(win+linux),那么工程设置请使用UTF-8+BOM的编码方式.

    另外,还需要在预编译头文件加入

    #if defined(_MSC_VER) && (_MSC_VER >= 1600)    
    # pragma execution_character_set("utf-8")    
    #endif

    或者添加QMAKE_CXXFLAGS += /utf-8到您的.pro文件中。

    3、Linux环境下,Qt Creator+gcc,新建工程,

    没有GBK编码可选,默认是UTF-8(无BOM)编码方式,考虑到跨平台,建议选择UTF-8+BOM的编码方式.

     

    ★★★★★★★★★★★★★★★综上所述,解决乱码的方法概括如下:★★★★★★★★★★★★★★★★★★★★★

    1、如果IDE是Qt Creator,把它的环境设置为“UTF-8+BOM”编码。

    2、如果IDE是Visual Studio,请下载插件,名称是ForceUTF8 (with BOM),所有源文件和头文件都会保存为“UTF-8+BOM”编码。

    3、如果编译器是MSVC,请在预编译头stdafx.h文件加入

    #if defined(_MSC_VER) && (_MSC_VER >= 1600)    
    # pragma execution_character_set("utf-8")    
    #endif

    4、源码文件main函数入口设置中文编码:

        #include <QTextCodec>

        QApplication a(argc, argv);

        //设置中文字体  
        a.setFont(QFont("Microsoft Yahei", 9));

    //设置中文编码
    #if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
    #if _MSC_VER
        QTextCodec *codec = QTextCodec::codecForName("gbk");
    #else
        QTextCodec *codec = QTextCodec::codecForName("utf-8");
    #endif
        QTextCodec::setCodecForLocale(codec);
        QTextCodec::setCodecForCStrings(codec);
        QTextCodec::setCodecForTr(codec);
    #else
        QTextCodec *codec = QTextCodec::codecForName("utf-8");
        QTextCodec::setCodecForLocale(codec);
    #endif

    5、如此一来,不管是MSVC编译器还是MinGW编译器,都能编译通过,且支持中文!

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

     

    x、参考文献

    Qt官网文档 

    https://wiki.qt.io/Strings_and_encodings_in_Qt

    https://doc.qt.io/qt-5/unicode.html

    ASCII,Unicode和UTF-8完全搞清楚 https://blog.csdn.net/Deft_MKJing/article/details/79460485

    Qt中文乱码原因及解决方案 https://blog.csdn.net/qq_35905572/article/details/95042444

    Qt中文乱码问题 http://blog.csdn.net/brave_heart_lxl/article/details/7186631

    尊重作者,支持原创,如需转载,请附上原地址:https://blog.csdn.net/libaineu2004/article/details/19245205

     

     

    展开全文
  • IntelliJ IDEA 统一设置编码为utf-8编码

    万次阅读 多人点赞 2018-06-11 10:49:11
    问题一:File-&gt;Settings-&gt;Editor-&gt;File Encodings问题二:...File Encodings问题三:将项目中的.idea文件夹中的encodings.xml文件中的编码格式改为uft-8问题四:File-&gt;Settings-&...

    问题一:

    File->Settings->Editor->File Encodings


    问题二:

    File->Other Settings->Default Settings ->Editor->File Encodings


    问题三:

    将项目中的.idea文件夹中的encodings.xml文件中的编码格式改为uft-8

    问题四:

    File->Settings->Build,Execution,Deployment -> Compiler -> Java Compiler

    设置 Additional command line parameters选项为 -encoding utf-8


    问题五:

    1)打开Run/Debug Configuration,选择你的tomcat

    2) 然后在  Server > VM options 设置为 -Dfile.encoding=UTF-8 ,重启tomcat

    问题六:

    清空浏览器缓存再试一次。

    展开全文
  • Java工程编码格式由GBK转化成utf-8(编码格式互转)

    万次阅读 多人点赞 2021-07-15 21:37:15
    在写项目的过程中我发现有的地方编码格式被设置成了 gbk 如果用eclipse等工具直接改回utf-8编码格式则会出现乱码。 在这里搞了一个工具,直接输入之前的编码格式跟要改的编码格式就会自动转换 转换完成后直接设置...

    在写项目的过程中我发现有的地方编码格式被设置成了 gbk 如果用eclipse等工具直接改回utf-8编码格式则会出现乱码。

    下载:https://download.csdn.net/download/weixin_44893902/20367405

    在这里搞了一个工具,直接输入之前的编码格式跟要改的编码格式就会自动转换

    在这里插入图片描述
    转换完成后直接设置为更改后的格式即可
    在这里插入图片描述

    以下是源代码:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import java.util.Scanner;
    
    /**
     * 把gbk编码的程序变换为用utf-8的格式编码
     *
     * 此程序只是为了改变 .java文件的编码格式如果你想要变换为其他格式只需要改变下面对应的编码按格式
     *
     * @author 明金同学	CSDN:https://ymjin.blog.csdn.net/
     */
    public class Files {
    
        /**
         *
         * @param args
         * @throws UnsupportedEncodingException
         * @throws IOException
         */
        public static void main(String[] args) throws UnsupportedEncodingException, IOException {
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入需要改变编码格式的文件位置");
            String str = scan.nextLine();
            File file = new File(str);
            System.out.println("文件的初始编码");
            String bm1 = scan.nextLine();
            System.out.println("文件需要转换成的编码");
            String bm2 = scan.nextLine();
            getAllFiles(file, bm1, bm2);
        }
    
        /**
         *
         * @param file 要编译的文件
         * @param bm1 文件的初始编码
         * @param bm2 文件需要转换成的编码
         * @throws FileNotFoundException 文件找不到
         * @throws UnsupportedEncodingException 编码出错
         * @throws IOException io异常
         */
        public static void getAllFiles(File file, String bm1, String bm2) throws FileNotFoundException, UnsupportedEncodingException, IOException {
            if (file.isDirectory()) {
                File[] test = file.listFiles();
                for (File test1 : test) {
                    //类的名字
                    String str = test1.getPath();
                    if (str.endsWith("java") & test1.isFile()) {
                        String[] s = str.split("\\.");
                        String filecope = s[0] + "cope." + s[1];
                        System.out.println(filecope);
                        File fil = new File(filecope);
                        //转格式
                        InputStreamReader isr = new InputStreamReader(new FileInputStream(test1), bm1);
                        OutputStreamWriter osr = new OutputStreamWriter(new FileOutputStream(fil), bm2);
                        int re = -1;
                        while ((re = isr.read()) != -1) {
                            osr.write(re);
                        }
                        isr.close();
                        osr.close();
                        InputStreamReader isrr = new InputStreamReader(new FileInputStream(fil), bm2);
                        OutputStreamWriter osrw = new OutputStreamWriter(new FileOutputStream(test1), bm2);
                        int r = -1;
                        while ((r = isrr.read()) != -1) {
                            osrw.write(r);
                        }
                        isrr.close();
                        osrw.close();
                        boolean d = fil.delete();
                        System.out.println(str + "文件转换utf-8成功:" + d);
                    }
                    getAllFiles(test1, bm1, bm2);
                }
            }
        }
    
    }
    

    参考:
    将GBK项目修改成UTF-8项目
    https://blog.csdn.net/chengzhuo5471/article/details/100840187
    https://my.oschina.net/momomo/blog/845610

    展开全文
  • 一篇文章彻底弄懂Base64编码原理

    万次阅读 多人点赞 2018-08-16 07:42:09
    目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么,...

    在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇博文带领大家了解一下Base64的底层实现。

    Base64的由来

    目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么,Base64到底起到什么作用呢?

    在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法。

    电子邮件刚问世的时候,只能传输英文,但后来随着用户的增加,中文、日文等文字的用户也有需求,但这些字符并不能被服务器或网关有效处理,因此Base64就登场了。随之,Base64在URL、Cookie、网页传输少量二进制文件中也有相应的使用。

    Base64的编码原理

    Base64的原理比较简单,每当我们使用Base64时都会先定义一个类似这样的数组:

    ['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']
    

    上面就是Base64的索引表,字符选用了"A-Z、a-z、0-9、+、/" 64个可打印字符,这是标准的Base64协议规定。在日常使用中我们还会看到“=”或“==”号出现在Base64的编码结果中,“=”在此是作为填充字符出现,后面会讲到。

    具体转换步骤

    • 第一步,将待转换的字符串每三个字节分为一组,每个字节占8bit,那么共有24个二进制位。
    • 第二步,将上面的24个二进制位每6个一组,共分为4组。
    • 第三步,在每组前面添加两个0,每组由6个变为8个二进制位,总共32个二进制位,即四个字节。
    • 第四步,根据Base64编码对照表(见下图)获得对应的值。
    0 A  17 R   34 i   51 z
    
    1 B  18 S   35 j   52 0
    
    2 C  19 T   36 k   53 1
    
    3 D  20 U   37 l   54 2
    
    4 E  21 V   38 m   55 3
    
    5 F  22 W   39 n   56 4
    
    6 G  23 X   40 o   57 5
    
    7 H  24 Y   41 p   58 6
    
    8 I  25 Z   42 q   59 7
    
    9 J  26 a   43 r   60 8
    
    10 K  27 b   44 s   61 9
    
    11 L  28 c   45 t   62 +
    
    12 M  29 d   46 u   63 /
    
    13 N  30 e   47 v
    
    14 O  31 f   48 w   
    
    15 P  32 g   49 x
    
    16 Q  33 h   50 y
    

    从上面的步骤我们发现:

    • Base64字符表中的字符原本用6个bit就可以表示,现在前面添加2个0,变为8个bit,会造成一定的浪费。因此,Base64编码之后的文本,要比原文大约三分之一。
    • 为什么使用3个字节一组呢?因为6和8的最小公倍数为24,三个字节正好24个二进制位,每6个bit位一组,恰好能够分为4组。

    示例说明

    以下图的表格为示例,我们具体分析一下整个过程。

    在这里插入图片描述

    • 第一步:“M”、“a”、"n"对应的ASCII码值分别为77,97,110,对应的二进制值是01001101、01100001、01101110。如图第二三行所示,由此组成一个24位的二进制字符串。
    • 第二步:如图红色框,将24位每6位二进制位一组分成四组。
    • 第三步:在上面每一组前面补两个0,扩展成32个二进制位,此时变为四个字节:00010011、00010110、00000101、00101110。分别对应的值(Base64编码索引)为:19、22、5、46。
    • 第四步:用上面的值在Base64编码表中进行查找,分别对应:T、W、F、u。因此“Man”Base64编码之后就变为:TWFu。

    位数不足情况

    上面是按照三个字节来举例说明的,如果字节数不足三个,那么该如何处理?

    在这里插入图片描述

    • 两个字节:两个字节共16个二进制位,依旧按照规则进行分组。此时总共16个二进制位,每6个一组,则第三组缺少2位,用0补齐,得到三个Base64编码,第四组完全没有数据则用“=”补上。因此,上图中“BC”转换之后为“QKM=”;
    • 一个字节:一个字节共8个二进制位,依旧按照规则进行分组。此时共8个二进制位,每6个一组,则第二组缺少4位,用0补齐,得到两个Base64编码,而后面两组没有对应数据,都用“=”补上。因此,上图中“A”转换之后为“QQ==”;

    注意事项

    • 大多数编码都是由字符串转化成二进制的过程,而Base64的编码则是从二进制转换为字符串。与常规恰恰相反,
    • Base64编码主要用在传输、存储、表示二进制领域,不能算得上加密,只是无法直接看到明文。也可以通过打乱Base64编码来进行加密。
    • 中文有多种编码(比如:utf-8、gb2312、gbk等),不同编码对应Base64编码结果都不一样。

    延伸

    上面我们已经看到了Base64就是用6位(2的6次幂就是64)表示字符,因此成为Base64。同理,Base32就是用5位,Base16就是用4位。大家可以按照上面的步骤进行演化一下。

    Java 验证

    最后,我们用一段Java代码来验证一下上面的转换结果:

    package com.secbro2.blog.utils;
    
    import sun.misc.BASE64Encoder;
    
    /**
     * @author zzs
     */
    public class Base64Utils {
    
    	public static void main(String[] args) {
    		String man = "Man";
    		String a = "A";
    		String bc = "BC";
    
    		BASE64Encoder encoder = new BASE64Encoder();
    		System.out.println("Man base64结果为:" + encoder.encode(man.getBytes()));
    		System.out.println("BC base64结果为:" + encoder.encode(bc.getBytes()));
    		System.out.println("A base64结果为:" + encoder.encode(a.getBytes()));
    	}
    }
    

    打印结果为:

    Man base64结果为:TWFu
    BC base64结果为:QkM=
    A base64结果为:QQ==
    

    以上结果与我们分析所得完全一致。

    精品SpringBoot 2.x视频教程

    《Spring Boot 2.x 视频教程全家桶》精品Spring Boot 2.x视频教程,打造一套最全的Spring Boot 2.x视频教程。


    程序新视界

    公众号“程序新视界”,一个让你软实力、硬技术同步提升的平台

    csdn-微信公众号

    展开全文
  • 字符编码那些事--彻底理解掌握编码知识

    万次阅读 多人点赞 2020-05-04 16:42:33
    每一个程序员都不可避免的遇到字符编码的问题,很多人在字符编码方面同样遇到不少问题,而且一直对各种编码懵懵懂懂、不清不楚。这篇文章就是针对字符编码中的一些问题进行了详细的阐述,能从根本上理解字符编码
  • 编码:算术编码

    万次阅读 2020-02-10 11:29:53
    算术编码不是简单的将每个信源符号映射成一个码字,而是对整个输入序列分配一个码字,所以平均意义上可以为每个信源符号分配长度小于1的码字。 算术编码操作简单,下面以一个实例讲解算术编码的原理: 设信源有a,b...
  • 拨开字符编码的迷雾--字符编码概述

    万次阅读 2017-11-27 20:46:23
    相信不少人在字符编码上面摔过跟头,这篇文章针对开发中需要了解的字符编码知识进行了简要的讲解,希望能够对大家有所帮助。 1. ASCII及其扩展 1.1 什么是ASCII字符集 字符集就是一系列用于显示的字符的...
  • 常见音频编码格式解析

    万次阅读 多人点赞 2017-12-15 11:22:06
    常见音频编码格式解析常见音频编码格式解析 MP3编码格式 1MP3概述 2MPEG音频压缩基础 3MPEG Layer3编解码的基本原理 4整个MP3文件结构 41ID3V2 42音频数据帧 43ID3v1 AAC编码格式 1AAC概述 2AAC扩展名 3AAC规格 4AAC...
  • 文章目录哈夫曼编码编码步骤例子优点缺点费诺编码编码步骤例子优点缺点香农编码编码步骤例子优点缺点参考 备注:本文除了例子与数据,其他内容均为整合网络资源。 哈夫曼编码 编码步骤 S1 将信源符号按照概率大小从...
  • 1、查看字符编码和语言 使用locale命令,语言是en_US(美式英语),编码是UTF-8 2、修改字符编码和语言 修改/etc/sysconfig/i18n 先看一下修改前的 然后,如改成中文编码: LANG=en_US.UTF-8 改为 LANG=&...
  • DL入门(2):自编码器(AutoEncoder)

    万次阅读 2021-01-17 13:02:49
    简单叙述普通自编码器、堆叠自编码器、稀疏自编码器、降噪自编码器的原理及应用。
  • 视频压缩编码和音频压缩编码的基本原理

    万次阅读 多人点赞 2014-06-03 00:01:20
    本文介绍一下视频压缩编码和音频压缩编码的基本原理。其实有关视频和音频编码的原理的资料非常的多,但是自己一直也没有去归纳和总结一下,在这里简单总结一下,以作备忘。
  • 香农编码,哈夫曼编码与费诺编码的比较

    万次阅读 多人点赞 2018-12-05 16:46:12
    一、香农编码 概念: 香农编码是是采用信源符号的累计概率分布函数来分配字码的。香农编码是根据香农第一定理直接得出的,指出了平均码长与信息之间的关系,同时也指出了可以通过编码使平均码长达到极限值。香农第一...
  • 编码器及其变形很多,本篇博客目前主要基于普通自编码器、欠完备自编码器、稀疏自编码器和去噪自编码器,会提供理论+实践(有的理论本人没有完全理解,就先没有写上,后更)。另外,关于收缩自编码器、变分自编码...
  • Visual Studio 2019修改编码UTF-8

    万次阅读 多人点赞 2019-07-13 14:21:13
    Visual Studio 2019修改文件编码 最近在使用VS的时候遇到一个问题,以前可以通过编译的代码编译报错,提示内容如下所示 分析代码之后未发现有语法问题,于是根据C4819的警告,修改文件编码。 VS 2019隐藏了高级...
  • 彻底弄懂 Unicode 编码

    万次阅读 多人点赞 2017-12-26 10:37:26
    今天,在学习 Node.js 中的 Buffer 对象时,注意到它的 alloc 和 from 方法会默认用 UTF-8 编码,在数组中每位对应 1 字节的十六进制数。想到了之间学习 ES6 时关于字符串的 Unicode 表示法,突然就很想知道 UTF-16 ...
  • 曼彻斯特编码(Manchester Encoding),也叫做相位编码( Phase Encode,简写PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。 在曼彻斯特编码中,用电压的跳变的不同来区分1和0。 从低...
  • idea快速编码之常用快捷键使用操作方法

    万次阅读 多人点赞 2020-05-04 20:29:24
    学习时,用IDEA开发Java的时候,有不少经常使用到的快捷键,熟悉快捷键可以很好地提高编码速度。以下介绍idea常用的快捷键。 IDEA快捷键使用教程目录一、 日常开发常用快捷键二、 快速查找及替换三、 快速重构四、 ...
  • emoji图片和编码

    千次下载 热门讨论 2012-05-17 15:11:49
    467个emoji的文件和编码表数据 包括Unicode编码,UTF8编码,UTF16编码,SBUnicode编码
  • 文章目录1、低延时编码1.1 转码方面优化1.2 低延时软件编码器的优化1.3 针对RTC的Codec实现1.4 低延迟应用2、AV1技术生态2.1 AV1与云游戏 1、低延时编码 低延时:(1s~5s)游戏直播,秀场直播等 超低延时: <1s...
  • 编码

    千次阅读 多人点赞 2019-07-04 16:49:57
    编码器是一种机电装备, 可以用来测量机械运动或者目标位置。 大多数编码器都使用光学传感器来提供脉冲序列形式的电信号, 这些信号可以依次转换成运动、方向或位置信息。 编码器依运动方式可分为旋转编码器或是线性...
  • Springboot 编码格式设置为UTF-8

    万次阅读 2018-05-09 09:20:50
    Springboot 编码格式设置为UTF-8 1.配置文件新增属性 // 文件格式为yml spring: #--------------------------charset-------------------------- http: encoding: charset: UTF-8 enabled: true force: ...
  • 编码与软编码

    千次阅读 多人点赞 2018-11-07 17:23:18
    编码:就是将数据直接写入到代码中进行编译开发,比如在没有mybatits前,将sql语句写入到jdbc代码里,在比如纯jsp开发的...软编码:则是将数据与源代码解耦,比如mybatis的配置文件,将sql于底层代码分离,就只...
  • 文章目录数据校验字符编码本质字符编码类别介绍多媒体格式 本篇主要是对计算机常识中的信息编码方面的知识进行学习的总结的第二部分 上一篇传送门 数据校验 后面再补齐 字符编码 本质 计算机存储介质中实际存储的都...
  • 汉字字符集编码查询 unicode编码查询

    万次阅读 2018-09-13 09:04:06
    查询网址:   ...   查询示例: ...常见的汉字字符集编码: ...GB2312编码:1981年5月1日发布的简体中文汉字编码国家标准。...BIG5编码:台湾地区繁体中文标准字符集,采用双字节编码,共收录13053...
  • 信源编码与信道编码

    万次阅读 多人点赞 2017-03-26 17:02:44
    但现代通信应用中常见的信源编码方式有:Huffman编码、算术编码、L-Z编码,这三种都是无损编码,另外还有一些有损的编码方式。信源编码的目标就是使信源减少冗余,更加有效、经济地传输,最常见的应用形式就是压缩。...
  • ASCII编码

    万次阅读 多人点赞 2021-03-31 21:28:10
    ASCII编码表 ASCII(American Standard Code for Information Interchange)编码表,美国标准信息交换代码。 在计算机中,所有的数据在存储和运算时都要使用二进制数表示。 a、b、c、d这样的52个字母(包括大写)、...
  • IntelliJ IDEA 设置编码为utf-8编码

    万次阅读 多人点赞 2018-06-08 21:58:59
    IntelliJ IDEA 统一设置为utf-8编码问题一:File-&gt;Settings-&gt;Editor-&gt;File Encodings问题二:
  • 用R语言实现霍夫曼编码

    万次阅读 2020-06-02 10:24:04
    可读性极低,而且其实也没必要用R语言写...mazijuzhen=matrix(,nrow=length(p),ncol=length(p)-1)###码字矩阵:第i行对应向量p的第i个分量所对应的那个待编码消息的编码后的码字 group=matrix(c(1:length(p),rep(NA,le.
  • 指数哥伦布编码

    万次阅读 2020-02-07 12:40:20
    指数哥伦布编码是变长编码的一种,类似于哈夫曼编码,与哈夫曼编码不同之处在于其在解码是不需要保存一个码表,可以直接根据码字进行解码。 编码 指数哥伦布编码由前缀和后缀两部分构成,前缀和后缀都依赖于指数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,645,477
精华内容 1,058,190
关键字:

编码