QT与VS环境 代码文件编码格式使用utf-8与带bom的utf-8的差异

使用QT进行开发的时候,有时候通常会遇到使用中文的时候,就算格式为utf-8,也会出现编译错误的问题,一般无从下手,这几天看到同事有专门研究这个问题,于是也决心花一点时间这地搞懂utf-8的编码。其中分为utf-8与utf-8 bom分别在QT与VS环境下的差异。

在QT环境下有下面几个特点:

  1. 使用QT Creator 新建的文件,默认编码方式为无bom的utf-8.
  2. 在没有中文的时候,utf-8与utf-8 bom,都编译正常。
  3. 在有中文的时候,utf-8编译会报错,utf-8 bom编译正常。

在VS环境中:

  1. 在没有中文的时候,utf-8与utf-8bom都可以编译通过。
  2. 在有中文的时候,utf-8编码,会编译报错。utf-8 bom可以编译通过。
  3. 在有中文的时候,只要加上下面的代码,无论编码方式是什么,都可以编译通过。
	#pragma execution_character_set("utf-8")

所以,我们平时是使用utf-8编码的时候,到底带不带bom头呢?
那么我们首先了解一下什么是bom

1.什么是BOM?
BOM(byte-order mark),既字节顺序标记。它是插入到 utf-8、utf-16、 utf-32、unicode编码的文件开头的标记。用来识别unicode文件的编码类型。
它是存储在文件开头的,所以我们通常会叫bom头。
也就是标准的utf-8是不带bom的,在utf-8编码的文件中放置bom头,主要是微软的习惯。

2.带BOM与不带BOM的区别?
带bom 的utf-8 与不带bom的utf-8的区别在于有没有bom。就是在文件的最开头有没有U+FEFF,也就是说有没有这个标记。

3.带还是不带?

  • 跨平台编译的情况一定不能带。
  • 只在windows上编译的可有可无,如果带中文的,建议使用。

你可能感兴趣的:(QT,编码)