精华内容
下载资源
问答
  • utf-8-bom
    千次阅读
    2020-12-09 19:12:49

           软件程序打开xml文件,在开发系统和部分用户计算机正常,在一个客户计算机出现xml解析错误,百思不得其解。后来突然想到了编码问题,用专业记事本编辑工具打开文件,发现文件的编码是UTF-8-BOM,另存为UTF-8即可。

           BOM——Byte Order Mark,就是字节序标记。UTF -8 BOM 是微软为了兼容用户代码页做的一个创新处理,也会导致有些系统不兼容。

     

    更多相关内容
  • 文件的编码格式需要转换,gb2312,utf,utf-8等编码格式的相互转换等
  • 当上传文件存在中文时,修改上传文件编码为utf-8-bom
  • C#UTF-8-bom转为UTF-8

    2021-07-15 09:37:40
    系统功能是生成个utf-8的xml文件下载到本机,但是用户的系统是Linux,我们的web系统部署到IIS上,生成的XML文件被windows给搞成了utf-8bom,linux又识别不了这种bom. 解决: XmlDocument xmlDoc = new XmlDocument...

    C#UTF-8-bom转为UTF-8

    系统功能是生成个utf-8的xml文件下载到本机,但是用户的系统是Linux,我们的web系统部署到IIS上,生成的XML文件被windows给搞成了utf-8bom,linux又识别不了这种bom.
    解决:

                        XmlDocument xmlDoc = new XmlDocument();
    					//创建类型声明节点  
    					XmlNode firstNode = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");
    					xmlDoc.AppendChild(firstNode);
    					//创建根节点  
    					XmlElement root = xmlDoc.CreateElement("unitData");
    					//xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    					//xsi:noNamespaceSchemaLocation="unitData-1.0.xsd"
    					root.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
    					//root.SetAttribute("noNamespaceSchemaLocation", "xsi", "unitData-1.0.xsd");
    
    					var attr = xmlDoc.CreateAttribute("xsi:noNamespaceSchemaLocation", "http://www.w3.org/2001/XMLSchema-instance");
    					attr.Value = "unitData-1.0.xsd";
    					root.Attributes.Append(attr);
    
    					root.SetAttribute("unit", item.unit);
    					root.SetAttribute("equipment", workstationName);
    					root.SetAttribute("starttime", item.starttime);
    					root.SetAttribute("endtime", item.endtime);
    					root.SetAttribute("state", item.state);
    
    					XmlElement node = xmlDoc.CreateElement("test");
    					node.SetAttribute("name", "FAT");
    					node.SetAttribute("testResultCode", item.state.ToLower() == "ok" ? "passed" : "failed");
    					node.InnerText = string.Empty;
    					root.AppendChild(node);
    
    					xmlDoc.AppendChild(root);
    
    					string savePath = subpath + "\\" + item.Model + "_" + item.Serialnumber + "_" + DateTime.Now.ToString("yyyyMMdd") + "_" + DateTime.Now.ToString("HHmmss") + ".xml";
    					//UTF8Encoding(false)表示不要bom
    					StreamWriter sw = new StreamWriter(savePath, false, new UTF8Encoding(false));
    					xmlDoc.Save(sw);
    					sw.WriteLine();
    					sw.Close();
    
    
    展开全文
  • utf-8 是一种在web应用中经常使用的一种 unicode 字符的编码方式,使用 utf-8 的好处在于它是一种变长的编码方式,对于 ANSII 码编码长度为1个字节,这样的话在传输大量 ASCII 字符集的网页时,可以大量节约网络带宽...
  • Java解决UTF-8BOM问题

    2016-03-18 14:26:19
    Java解决UTF-8BOM问题
  • 原先用PrintWrite写入的时候,设置编码为utf-8,但是不满足需求。追加使用BufferedWriter 字节流编码不支持utf-8-bom,新增写入之前的代码 FileOutputStream fos = null; //需要UTF-8-BOM编码 byte[] uft8bom={...

    原先用PrintWrite写入的时候,设置编码为utf-8,但是不满足需求。追加使用BufferedWriter 字节流编码不支持utf-8-bom,新增写入之前的代码

    FileOutputStream fos = null;
                    //需要UTF-8-BOM编码
                    byte[] uft8bom={(byte)0xef,(byte)0xbb,(byte)0xbf};
                    fos = new FileOutputStream(filePath, true);
                    fos.write(uft8bom);
    
    public static void csvwriter(List<LinkedHashMap<String, String>> mapList, String[] headers, String filePath)
                throws IOException {
            check(mapList, headers, filePath);
            //判断是否有源文件,如果有就追加写入
            if (!readCsv(filePath)){
    
                FileOutputStream fos = null;
                //需要UTF-8-BOM编码
                byte[] uft8bom={(byte)0xef,(byte)0xbb,(byte)0xbf};
                fos = new FileOutputStream(filePath, true);
                fos.write(uft8bom);
                //第一次写入
                try (PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(fos, "UTF-8"))) {
                    StringBuilder builder = new StringBuilder();
                    for(String header : headers) {
                        builder.append(header).append(",");
                    }
                    builder.deleteCharAt(builder.length() - 1);
                    printWriter.println(builder.toString());
                    builder.delete(0, builder.length());
                    for (LinkedHashMap<String, String> map : mapList) {
                        for (Map.Entry<String, String> entry : map.entrySet()) {
                            builder.append(entry.getValue()).append(",");
                        }
                        builder.deleteCharAt(builder.length() - 1);
                        printWriter.println(builder.toString());
                        builder.delete(0, builder.length());
                    }
                }
            }else {
                //追加写入
    //            File csvFile = new File(filePath);
                try{
                    FileOutputStream fos = null;
                    //需要UTF-8-BOM编码
                    byte[] uft8bom={(byte)0xef,(byte)0xbb,(byte)0xbf};
                    fos = new FileOutputStream(filePath, true);
                    fos.write(uft8bom);
                    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"), 1024);
    
                    //遍历所有数据
                    for (LinkedHashMap<String, String> map : mapList) {
                        StringBuilder builder = new StringBuilder();
                        for (Map.Entry<String, String> entry : map.entrySet()) {
                            builder.append(entry.getValue()).append(",");
                        }
                        builder.append("\r\n");
                        bw.write(builder.toString());
                    }
                    bw.flush();
                    bw.close();
    
                }catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    

    感谢:https://www.cnblogs.com/jinzhiming/p/10317912.html

    展开全文
  • UTF-8UTF-8(BOM)区别和一些说明

    千次阅读 2021-07-31 16:31:19
    写在前面在我们通常使用的...原因在于:此时保存的编码方式自动会变为UTF-8 BOM 一、一个汉字在不同的编码方式中占多少字节?        1.在UTF-8中,一个汉字占3个字节(一个字符占一个字...

    写在前面

    在我们通常使用的windows系统中,我发现了一个有趣的现象。我新建一个空的文本文档,点击文件-另存为-编码选择UTF-8,然后保存。此时这个文件明明是空的,却占了3字节大小。原因在于:此时保存的编码方式自动会变为UTF-8 BOM

    一、一个汉字在不同的编码方式中占多少字节?

           1.在UTF-8中,一个汉字占3个字节(一个字符占一个字节)

          2.在ASCII码中,一个汉字占2个字节(一个字符占一个字节)

          3.在Unicode编码中,一个汉字占2个字节(一个字符同样占两个字节,所以JAVA中char a = '中';是可以的)

    二、UTF-8与UTF-8 BOM

            BOM即byte order mark,具体含义可百度百科或维基百科,UTF-8文件中放置BOM主要是微软的习惯,但是放在别的系统上会出现问题。不含BOM的UTF-8才是标准形式,UTF-8不需要BOM带BOM的UTF-8文件的开头会有U+FEFF,所以我新建的空文件会有3字节的大小。

    BOM的含义

      BOM即Byte Order Mark字节序标记。BOM是为UTF-16和UTF-32准备的,用户标记字节序(byte order)。拿UTF-16来举例,其是以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流"594E",那么这是“奎”还是“乙”?

      Unicode规范中推荐的标记字节顺序的方法是BOM:在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"(零宽度无间断空间)的字符,它的编码是FEFF。而FEFF在UCS中是不不能再的字符(即不可见),所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者接收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称为BOM。

      UTF-8是以字节为编码单元,没有字节序的问题


    延伸一下:

      UTF-8编码是以1个字节为单位进行处理的,不会受CPU大小端的影响;需要考虑下一位时就地址 + 1。

      UTF-16、UTF-32是以2个字节和4个字节为单位进行处理的,即1次读取2个字节或4个字节,这样一来,在存储和网络传输时就要考虑1个单位内2个字节或4个字节之间顺序的问题。


     

    UTF-8 BOM

      UTF-8 BOM又叫UTF-8 签名,UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。当文本程序读取到以 EF BB BF开头的字节流时,就知道这是UTF-8编码了。Windows就是使用BOM来标记文本文件的编码方式的


    补充:

    "ZERO WIDTH NO-BREAK SPACE"字符的UCS编码为FEFF(假设为大端),对应的UTF-8编码为 EF BB BF 


     

      即以EF BB BF开头的字节流可表明这是段UTF-8编码的字节流。但如果文件本身就是UTF-8编码的,EF BB BF这三个字节就毫无用处了。 所以,可以说BOM的存在对于UTF-8本身没有任何作用

     

    UTF-8文件中包含BOM的坏处

      1、对php的影响

      php在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头的那三个EF BB BF字符,直接当做文本进行解析,导致解析错误。

      2、在linux上执行SQL脚本报错


      最近开发过程中遇到,windows下编写的SQL文件,在linux下执行时,总是报错。

      在文件的开头,无论是使用中文注释还是英文注释,甚至去掉注释,也会报SP2-0734: unknown command beginning "?<span "="">dec<span "="">lare ..." - rest of line ignored. 的错误。
    <span "="">如下是文件开头部分

    1 --create tablespace
    2 declare
    3 v_tbs_name varchar2(200):='hytpdtsmsshistorydb';
    4 begin

      报错如下:

    1 SP2-0734: unknown command beginning "?--create ..." - rest of line ignored.
    2 
    3 
    4 PL/SQL procedure successfully completed.

      网上没有找到类似问题的解决办法,且文件编码确认已经更改为utf-8,该问题困惑了我很久。
      最后查看一下BOM与 no BOM的区别,尝试更改为no BOM,居然就没有再出现错误。

      修改完成后,无论使用中文,还是英文,或者去掉注释,都能正常执行。


     

     

    血泪建议:UTF-8最好不要带BOM

      UTF-8」和「带 BOM 的 UTF-8」的区别就是有没有 BOM。即文件开头有没有 U+FEFF。

      1、Linux中查看BOM的方法:使用less命令,其它命令可能看不到效果:

    在这里插入图片描述

      发现词语之前多了一个<U+FEFF>。

    三、创建UTF-8(而非UTF-8 BOM)文件的方法

            在发现文件另存为UTF-8缺得到UTF-8 BOM文件后,我们怎样才能得到UTF-8呢?

    方法:.先另存为UTF-8保存,再使用notepad++打开,把里面的编码设置为无BOM的UTF-8然后保存。(此方法治标不治本,因为当你再次在里面写汉字时,文件会自动变成UTF-8 BOM)

                              

     

    2、UTF-8去除BOM的方法

      Linux下:

      (1)

        1)vim打开文件

        2)执行:set nobomb

        3)保存:wq

      (2)

        dos2unix filename

        将windows格式文件转为Unix、Linux格式文件。该命令不仅可将windows文件的换行符\r\n转为Unix、Linux文件的换行符\n,还可以将UTF-8 Unicode (with BOM)转换为UTF-8 Unicode.

      PS:

      遇到一个比较坑爹的情况,1个UTF-8 Unicode (with BOM)文件中包含两个<U+FEFF>,这是无论使用方法(1)还是方法(2),都要执行两次才能将<U+FEFF>完全去除!!!

      (2)Windows下,使用NotePad++打开这个文件,然后选择“编码”,再选择“以UTF-8无BOM格式编码”,最后重新保存文件即可!

    展开全文
  • 口香糖将添加到文件从维基百科: Unicode标准允许使用UTF-8中的BOM,但既不需要也不建议使用它。 字节顺序在UTF-8中没有意义。 Gulp会删除BOM表,因为它是无用的。 这是针对一些确实需要它的愚蠢工具。 除非确实需要...
  • NULL 博文链接:https://baobeituping.iteye.com/blog/1280825
  • Python 读取UTF-8-BOM 文件

    千次阅读 2021-01-06 00:16:25
    类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。在...
  • 一、需求描述 在我之前的博客: 【我的Android进阶之旅】使用TextAnalysisTool来快速提高你分析文本日志的效率 中有介绍下面一个关于中文无法显示的问题,如下所示: ...【使用 UTF-8 BOM编码】,将
  • import os def convert(d): for f in os.listdir(d): full = os.path.join(d, f) if os.path.isfile(full): ... s = open(full, mode='r', encoding='utf-8-sig').read() open(full, mode='w', encoding='
  • 添加或删除 xml CSV UTF-8 bom头文件
  • 关于utf-8BOM 转utf-8

    2021-07-03 15:07:27
    关于utf-8BOM 转utf-8 在跑paddleOCR时遇到了一个问题,在使用gen_label.py的过程中,出现了报错: 在读取一个label文件时出现 “\ufeff” 读取错误 原因是“\ufeff”是utf-8BOM格式的,需要更改为utf-8格式 现贴下...
  • UTF-8BOM格式与UTF-8BOM格式转换

    千次阅读 2021-08-28 10:13:54
    VS采用UTF-8 BOM格式编码,而Linux下采用UTF-8BOM格式。BOM用来标记编码的字节顺序,但是由于编码字节顺序对于UTF-8来说无关紧要,而且Unicode标准也并不推荐使用带BOMUTF-8编码格式。总之,由于Windows和Linux...
  • Notepad++→编码→使用 UTF-8 编码→保存
  • 首先说下UTF-8格式和UTF-8BOM格式的区别。两者的区别就是UTF-8格式的文件,在第一行的开始位置,会有个标志位,一般工具是无法看到的,占3个字节。而UTF-8BOM格式的文件,顾名思义,就是没有这个标志位。先说下...
  • * utf-8bom 批量转为 utf-8bom 文件格式 */ public class UTF8BOMConverter extends Reader { private static final int BOM_SIZE = 4; PushbackInputStream internalIn;//回退流对象 InputStreamReader ...
  • UTF-8 文件中删除 BOM(字节顺序标记)。 写这个是因为我有一些带有 BOMUTF-8 格式的 Android 项目的遗留源代码,但找不到任何软件可以在 MAC OS 上执行批处理 BOM 删除操作。 ##用法 bs.py [-h] [--type...
  • Qt 批量修改文件编码格式为UTF-8-BOM

    千次阅读 2021-11-29 21:10:16
    Qt 批量修改文件编码格式,以UTF-8-BOM为例。
  • 所以不含 BOMUTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一下:把带有 BOM 的小端序 UTF-16 称作「Unicode」而又不详细说明,这也是微软的习惯)。 BOM是为 UTF-16 和 UTF-32 准备的...
  • @[憨憨学代码](关于使用Notepad++的 UTF-8UTF-8-BOM) 谨在此记录一些我自己学习过程中的问题和想法。以下所述若有不妥之处,欢迎大家批评指正,也希望大家多提出宝贵意见和建议。 将Notepad++编码格式设置为UTF-8无...
  • 易语言将文本转换为UTF-8码源码,将文本转换为UTF-8
  • 【C#】文件编码 转换成UTF-8-BOM

    千次阅读 2021-12-23 10:54:55
    } // 重写文件(以UTF-8BOM格式) using (StreamWriter sw = new StreamWriter(filePath, false, new UTF8Encoding(true))) { sw.Write(str); sw.Close(); } } catch (System.Exception) { // ログ BRLogger.Output...
  • CSV乱码 - UTF-8 Unicode (with BOM)

    千次阅读 2021-08-12 17:03:40
    记事本等编辑器通过它来识别这个文件是否以UTF-8编码(当然即便没有UTF-8 BOM头记事本也能通过其它方式正确识别UTF-8编码)。 如果一个UTF-8编码的字符串的开头处没有BOM头又会发生什么? 举个例子 代码demo /** * ...
  • UTF-8和不带BOMUTF-8有什么区别?

    千次阅读 2019-12-20 09:24:02
    没有BOMUTF-8UTF-8有什么区别? 哪个更好?
  • UTF-8(with BOM)与UTF-8相互转换

    千次阅读 2020-04-23 00:21:14
    Eclipse采用UTF-8 BOM格式编码,而Linux下采用UTF-8BOM格式。BOM用来标记编码的字节顺序,但是由于编码字节顺序对于UTF-8来说无关紧要,而且Unicode标准也并不推荐使用带BOMUTF-8编码格式。总之,由于Windows和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,445
精华内容 18,578
关键字:

utf-8-bom