精华内容
下载资源
问答
  • 图解unicode、utf8和utf8mb4

    万次阅读 2021-02-26 17:54:03
    字符集和字符编码 字符集(CCS: Coded Character Set): 就是一个表格,表示每个字符对应数字(通常用16进制表示),比如unicode字符集中,数字1...对于unicode字符,utf8就是它的编码方案(如何utf8转换成01表示下.

    字符集发展

    字符集和字符编码

    字符集(CCS: Coded Character Set):

    就是一个表格,表示每个字符对应数字(通常用16进制表示),比如unicode字符集中,数字1对应的就是U+00031,字母a对应的就是U+00061

    在这里插入图片描述

    字符编码(CEF:Character Encoding Form):

    因为计算机只认识01,所以计算机在存储字母aU+00031)的时候,不能直接存储。所以就需要编码将字母a转换成01表示形式。对于unicode字符,utf8就是它的编码方案(如何utf8转换成01表示下文介绍)。

    字符:

    字符简单理解就是人类能(容易)看懂得符号。

    比如对于汉字,机器存储的是11100100 10111000 10100101,人类根本看不懂。转换成unicode表示方法是U+4E25,依然看不懂。

    人类只能看懂这个字符,三者之间的关系如下:
    在这里插入图片描述

    字符串到保存文件过程如下:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Smo4ICe-1614333267514)(%E5%BD%BB%E5%BA%95%E6%90%9E%E6%B8%85unicode%E3%80%81utf8%E5%92%8Cutf8mb4%20ccefc7a932a14295b1f28eac20ef1733/Untitled%203.png)]

    UTF-8编码

    这个字的unicode码是U+4E25(对应的二进制数字是100111000100101),而utf8编码之后是11100100 10111000 10100101,是不是很奇怪?两个二进制完全不一样,是因为utf8有一套编码规则。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3yU0gpEb-1614333267515)(%E5%BD%BB%E5%BA%95%E6%90%9E%E6%B8%85unicode%E3%80%81utf8%E5%92%8Cutf8mb4%20ccefc7a932a14295b1f28eac20ef1733/Untitled%204.png)]

    UTF-8编码规则

    utf8 最大的一个特点,就是它是一种可变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

    utf8 的编码规则很简单,只有二条:

    • 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,utf8 编码和 ASCII 码是相同的。
    • 对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。

    下表总结了编码规则,字母x表示可用编码的位。

    Unicode符号范围      |        UTF-8编码方式
      (十六进制)         |         (二进制)
    --------------------+---------------------------------------------
    0000 0000-0000 007F | 0xxxxxxx
    0000 0080-0000 07FF | 110xxxxx 10xxxxxx
    0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
    0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    

    字的Unicode编码是4E25处于0000 0800 - 0000 FFFF这个范围里面,所以需要三个字节表示。

    哇塞,原来是这样

    utf8和utf8mb4

    utf8mb4只是mysql特有的概念,原因是mysql5.5.3之前,Unicode收录的字符还不是很多,(最大)3个字节足够存储,所以那时的mysqlutf8(alias of “utf8mb3”)存储也设计为3字节存储。后来Unicode收录的字符更多了,扩张到4字节了(比如表情😁)。

    MySQL也在5.5.3版本之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的Unicode

    MySQL官方网站也解释了utf8mb3utf8mb4之间的关系。https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb4.html

    https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html

    总结

    • Unicode是字符集,是符合和码点的映射表
    • utf8Unicode的一种最常见的字符编码方式(还有utf16utf32
    • mysqlutf8实际上是utf8mb3(最大存储3字节),utf8mb4最大可以存储4字节(大部分表情都要占用4字节,所以需要选择utf8mb4
    展开全文
  • 彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)

    万次阅读 多人点赞 2014-02-15 16:46:22
    一、Qt环境设置 Qt Creator,菜单->工具->选项->文本编辑器->行为->文件编码: 默认编码:System(简体中文windows系统默认指的是GBK编码,即下拉框选项里的GBK/windows-936-2000/CP936/MS...★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

     

     

    展开全文
  • utf-8的中文是一个汉字占三个字节长度吗?

    万次阅读 多人点赞 2016-09-07 09:35:21
    英文字母和中文汉字在不同字符集编码下的字节数英文字母:字节数 : 1;...编码:UTF-8字节数 : 4;编码:UTF-16字节数 : 2;编码:UTF-16BE字节数 : 2;编码:UTF-16LE中文汉字:字节数 : 2;编码:GB2312字节数 : 2;编...

    英文字母和中文汉字在不同字符集编码下的字节数
    英文字母:

    字节数 : 1;编码:GB2312

    字节数 : 1;编码:GBK

    字节数 : 1;编码:GB18030

    字节数 : 1;编码:ISO-8859-1

    字节数 : 1;编码:UTF-8

    字节数 : 4;编码:UTF-16

    字节数 : 2;编码:UTF-16BE

    字节数 : 2;编码:UTF-16LE

     

    中文汉字:

    字节数 : 2;编码:GB2312

    字节数 : 2;编码:GBK

    字节数 : 2;编码:GB18030

    字节数 : 1;编码:ISO-8859-1

    字节数 : 3;编码:UTF-8

    字节数 : 4;编码:UTF-16

    字节数 : 2;编码:UTF-16BE

    字节数 : 2;编码:UTF-16LE

    这是个好问题,可以当作一个笔试题。先从字符编码讲起。

    1、美国人首先对其英文字符进行了编码,也就是最早的ascii码,用一个字节的低7位来表示英文的128个字符,高1位统一为0;

    2、后来欧洲人发现尼玛你这128位哪够用,比如我高贵的法国人字母上面的还有注音符,这个怎么区分,得,把高1位编进来吧,这样欧洲普遍使用一个全字节进行编码,最多可表示256位。欧美人就是喜欢直来直去,字符少,编码用得位数少;

    3、但是即使位数少,不同国家地区用不同的字符编码,虽然0--127表示的符号是一样的,但是128--255这一段的解释完全乱套了,即使2进制完全一样,表示的字符完全不一样,比如135在法语,希伯来语,俄语编码中完全是不同的符号;

    4、更麻烦的是,尼玛这电脑高科技传到中国后,中国人发现我们有10万多个汉字,你们欧美这256字塞牙缝都不够。于是就发明了GB2312这些汉字编码,典型的用2个字节来表示绝大部分的常用汉字,最多可以表示65536个汉字字符,这样就不难理解有些汉字你在新华字典里查得到,但是电脑上如果不处理一下你是显示不出来的了吧。

    5、这下各用各的字符集编码,这世界咋统一?俄国人发封email给中国人,两边字符集编码不同,尼玛显示都是乱码啊。为了统一,于是就发明了unicode,将世界上所有的符号都纳入其中,每一个符号都给予一个独一无二的编码,现在unicode可以容纳100多万个符号,每个符号的编码都不一样,这下可统一了,所有语言都可以互通,一个网页页面里可以同时显示各国文字。

    6、然而,unicode虽然统一了全世界字符的二进制编码,但没有规定如何存储啊,亲。x86和amd体系结构的电脑小端序和大端序都分不清,别提计算机如何识别到底是unicode还是acsii了。如果Unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,文本文件的大小会因此大出二三倍,这对于存储来说是极大的浪费。这样导致一个后果:出现了Unicode的多种存储方式。

    7、互联网的兴起,网页上要显示各种字符,必须统一啊,亲。utf-8就是Unicode最重要的实现方式之一。另外还有utf-16、utf-32等。UTF-8不是固定字长编码的,而是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。这是种比较巧妙的设计,如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

    8、注意unicode的字符编码和utf-8的存储编码表示是不同的,例如"严"字的Unicode码是4E25,UTF-8编码是E4B8A5,这个7里面解释了的,UTF-8编码不仅考虑了编码,还考虑了存储,E4B8A5是在存储识别编码的基础上塞进了4E25。

    9、UTF-8 使用一至四个字节为每个字符编码。128 个 ASCII 字符(Unicode 范围由 U+0000 至 U+007F)只需一个字节,带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及马尔代夫语(Unicode 范围由 U+0080 至 U+07FF)需要二个字节,其他基本多文种平面(BMP)中的字符(CJK属于此类-Qieqie注)使用三个字节,其他 Unicode 辅助平面的字符使用四字节编码。

     10、最后,要回答你的问题,常规来看,中文汉字在utf-8中到底占几个字节,一般是3个字节,最常见的编码方式是1110xxxx 10xxxxxx 10xxxxxx。

    原文链接:找不到了。。。

    展开全文
  • UTF8、UTF16、UTF32区别

    千次阅读 2019-04-10 22:19:30
    UTF8、UTF16、UTF32区别

    UTF8、UTF16、UTF32都是unicode字符集的字符编码。

    UTF意思是unicode转换格式(Unicode transform format),出现UTF8、UTF16、UTF32是出于要在内存中存储字符的目的而对unicode字符编号进行编码。

    UTF8、UTF16、UTF32区别:(8、16、32可看做每种字符编码存储所需的最少的比特位数)

    UTF8:存在单字节编码,兼容ASCII;当编码为一个字节,则设最高比特位为0;当编码超过一个字节,则需要几个字节,就在第一个字节从最高位开始令连续的几个比特位为1,之后的字节最高位为10。

    UTF32:用固定长度的字节存储字符编码,不管Unicode字符编号需要几个字节,全部都用4个字节存储,直接存储Unicode编号。无需经过字符编号向字符编码的转换步骤,提高效率,用空间换时间。

    UTF16:使用2或4个字节进行存储。对于Unicode编号范围在0~FFFF之间的字符,统一用两个字节存储,无需字符转换,直接存储Unicode编号。对于Unicode字符编号在10000-10FFFF之间的字符,UTF16用四个字节存储,简单说就是:将Unicode字符编号(3字节)分为两部分,高位部分(Unicode字符编号中占1.5个字节)用一个值介于 D800-DBFF (110110yy yyyyyyyy,y为0/1)之间的双字节存储,低位部分用一个值介于 DC00-DFFF (110111xx xxxxxxxx,x为0/1)的双字节存储。而介于D800-DFFF之间的编码在Unicode中是预留的,不安排字符,如果Unicode中有字符的编号是这之间的值,会引发冲突和歧义,很有可能一个不常见字符(存储为四个字节)最后被读成两个常见字符(存储为两个字节)。

    参考:https://blog.csdn.net/pipi1375/article/details/84784392

    展开全文
  • Visual Studio 2019修改编码UTF-8

    万次阅读 多人点赞 2019-07-13 14:21:13
    VS 2019隐藏了高级保存功能,导致没办法直接去设置代码编码 UTF-8。 那么我们直接把高级保存功能调用出来即可: 单击“工具”|“自定义”命令,弹出“自定义”对话框。 单击“命令”标签,...
  • 字符编码的概念(UTF-8、UTF-16、UTF-32都是什么鬼)

    万次阅读 多人点赞 2017-11-30 17:11:56
    UTF-16:介于 UTF-8 和 UTF-32 之间,使用 2 个或者 4 个字节来存储,长度既固定又可变。 UTF 是 Unicode Transformation Format 的缩写,意思是“Unicode转换格式”,后面的数字表明至少使用多少个比特位(Bit)来...
  • charset=UTF-8”无论是POST请求还是GET请求都是可以通过这种方式成功获取参数,但是如果前端POST请求中的body是Json对象的话,会报上述错误。 请求中传JSON时设置的Content-Type如果是application/json或者text/...
  • IDEA中Tomcat在控制台乱码问题以及IDEA编码设置UTF-8

    万次阅读 多人点赞 2018-02-19 16:22:47
    在idea中经常遇到jsp的乱码问题,原因是编码不是UTF-8的问题,这次来彻底解决idea的编码问题首先设置idea编辑器的编码:File-Setting设置如下然后配置tomcat的编码问题:Run/DeBug Configurations在VM options填写-...
  • utf8与utf16转换

    千次阅读 2019-03-14 23:18:59
    1.UTF8与UTF16编码转换 std::string ConvertFromUtf16ToUtf8(const std::wstring&amp; wstr) { std::string convertedString; int requiredSize = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, 0, 0, 0...
  • utf8mb4 已成为 MySQL 8.0 的默认字符集,在MySQL 8.0.1及更高版本中将 utf8mb4_0900_ai_ci 作为默认排序规则。 新项目只考虑 utf8mb4 UTF-8 编码是一种变长的编码机制,可以用1~4个字节存储字符。 因为历史遗留问题...
  • 0x00 问题引出: 最近在做一个买房自动化分析Python脚本,需要爬取网页。 在使用urllib获取reqest的response的时候,还要进行编码转换。...UnicodeDecodeError: 'utf-8' codec can't decode byte 0x
  • UTF-8编码占几个字节?

    万次阅读 多人点赞 2016-10-26 18:27:45
    占2个字节的:带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要...一个utf8数字占1个字节 一个utf8英文字母占1个字节 少数是汉字每个占用3个字节,多数占用...
  • MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf...
  • 首先明确一点:UTF-8 BOM与UTF-8带签名指的是同一回事,二者指的是UTF-8的同一格式 UTF-8 BOM中的BOM,全称为Byte order mark。 带BOM(签名)的UTF-8文本文件与不带BOM的UTF-8文本文件的区别在于:前者在文件的...
  • 编码UTF-8 的不可映射字符 /非法字符

    万次阅读 2017-09-08 10:08:26
    从网上下载了别人的代码,导入自己的项目中,运行时出现了这样的问题:错误:编码UTF-8 的不可映射字符 原因是下载下来的代码是很早很早以前用 eclipse 写的, 现在用AS,两者起冲突了…… 解决: 1.去往出现...
  • UTF-8是使用1~4个字节,一种变长的编码格式,字符编码。mb4即 most bytes 4,使用4个字节来表示完整的UTF-8。 mysql的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 ...
  • 众所周知,utf-8 每个字符最多支持四个字节, 而utf8每个字符最多只支持3个字节。这是mysql的一个bug,或者说是一个失误,因为mydql做过代码迁移,已经无法找到这个bug的提交记录。在2010年发布一个叫做“utf8mb4”...
  • mysql字符集 utf8 和utf8mb4 的区别

    万次阅读 多人点赞 2019-05-09 10:53:26
    我们新建mysql数据库的时候,需要指定数据库的字符集,一般我们都是选择utf8这个字符集,但是还会又一个utf8mb4这个字符集,好像和utf8有联系,今天就来解析一下这两者的区别。 二、起源 MySQL在5.5.3之后增加了这个...
  • MySQL中 utf8和utf8mb4区别

    千次阅读 2019-08-08 19:52:52
    utf8和utf8mb4区别
  • utf8和utf8mb4的区别

    千次阅读 2020-04-18 13:02:10
    我们新建mysql数据库的时候,需要指定数据库的字符集,一般我们都是选择utf8这个字符集,但是还会又一个utf8mb4这个字符集,好像和utf8有联系,今天就来解析一下这两者的区别。 二、起源 MySQL在5.5.3之后增加了这...
  • utf-8和utf-8-sig的区别(CSV文件 乱码)

    万次阅读 多人点赞 2019-07-17 14:35:45
    1、”utf-8“ 是以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序问题,因此它不需要BOM,所以当用"utf-8"编码方式读取带有BOM的文件时,它会把BOM当做是文件内容来处理, 也就会发生类似上边的错误. ...
  • utf8和utf8mb4区别

    千次阅读 2018-12-18 09:37:11
    好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,一般情况下使用utf8也就够了。 二、内容描述  那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来utf-8编...
  • lua中怎么从utf16转到utf8 ? 从网上找到个js的实现方法,但是不知道参数是什么, ``` function utf16ToUtf8(s){ if(!s){ return; } var i, code, ret = [], len = s.length; for(i = 0; i ; i++){ ...
  • utf8与utf8md4

    千次阅读 2017-09-02 19:09:40
    mysql的utf8字符集最多只支持3字节表示的字符,对于4字节的utf8字符需要用utf8mb4代替。 即:修改数据库连接和表相应字段为utf8mb4 插入数据时:  数据库连接 表字段 结果  utfutf8 失败  utf8mb4 utf8 ...
  • Unicode 和 UTF-8、UTF-16、UTF-32之间的关系

    千次阅读 多人点赞 2019-03-15 21:41:05
    Unicode 和 UTF-8、UTF-16、UTF-32之间的关系 要厘清它们之间的关系就要先从编码开始说起: ASCII码 我们都知道,在计算机的世界里,信息的表示方式只有 0 和 1,但是我们人类信息表示的方式却与之大不相同,很多时候...
  • utf8和utf8mb4的区分

    千次阅读 2019-03-17 20:58:05
    好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。 (2)内容描述: 那上面说了既然utf8能够存下大部分中文汉字,那为什么还要...
  • UTF-8 和UTF8和utf-8和utf8有什么区别 ?

    千次阅读 2015-01-17 21:44:20
    UTF-8”是标准写法,在Windows下边英文不区分大小写,所以也可以写成“utf-8”。“UTF-8”也可以把中间的“-”省略,写成“UTF8”。一般程序都能识别,但也有例外(如下文),为了严格一点,最好用标准的大写“UTF...
  • 最近写了一个Python小程序,用来统计...UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xa1 in position 0: invalid start byte 后来经过不断查找终于找到了解决办法。 由于我在程序中设定文件打开的...
  • UTF-8, UTF-16, UTF-16LE, UTF-16BE的区别

    千次阅读 2015-06-22 20:39:39
    首先, 我们说的unicode, 其实就是utf-16, 但最通用的却是utf-8 原因: 我猜大概是英文占的比例比较大, 这样utf-8的存储优势比较明显, 因为utf-16是固定16位的(双字节), 而utf-8则是看情况而定, 即可变长度, 常规的128...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 727,538
精华内容 291,015
关键字:

utf