精华内容
下载资源
问答
  • 2015-09-08 17:30:52

    遇到一个问题,.NET后台生成HTML到了Linux上就会多出一行乱码,样式会乱,查原因是因为.NET运行在windows平台,生成UTF-8会自动加一个BOM头。

     

    去掉BOM其实关键代码就这么一行

     System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding(false);
                    StreamWriter sw = new StreamWriter(nFile,utf8);

    下面2个文件是去掉的和未去掉的,其中EF BB BF就是BOM头。

     

    private bool FileStreamWriteFile(Model.RecommendHtml model)
            {
                try
                {
                    string writeUrl = ConfigurationManager.AppSettings["unix21"];
                    string htmlurl = writeUrl + @"\html\" + model.ID + ".html";
                    FileStream nFile = new FileStream(htmlurl, FileMode.OpenOrCreate, FileAccess.ReadWrite);
                    nFile.Seek(0, SeekOrigin.Begin);
                    nFile.SetLength(0); 
                    System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding(false);
                    StreamWriter sw = new StreamWriter(nFile,utf8);
                    sw.Write(model.RecommendContent);
                    sw.Close();
                    nFile.Close();
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }


     

     

    关于UTF-8和BOM头的参考信息:

    UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM。
    所以不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一下:把带有 BOM 的小端序 UTF-16 称作「Unicode」而又不详细说明,这也是微软的习惯)。
    BOM(byte order mark)是为 UTF-16 和 UTF-32 准备的,用于标记字节序(byte order)。微软在 UTF-8 中使用 BOM 是因为这样可以把 UTF-8 和 ASCII 等编码明确区分开,但这样的文件在 Windows 之外的操作系统里会带来问题。

     

    其实说BOM是个坏习惯也不尽然。BOM也是Unicode标准的一部分,有它特定的适用范围。通常BOM是用来标示Unicode纯文本字节流的,用来提供一种方便的方法让文本处理程序识别读入的.txt文件是哪个Unicode编码(UTF-8,UTF-16BE,UTF-16LE)。Windows相对对BOM处理比较好,是因为Windows把Unicode识别代码集成进了API里,主要是CreateFile()。打开文本文件时它会自动识别并剔除BOM。Windows用这个有历史原因,因为它最初脱胎于多代码页的环境(ANSI环境)。而引入Unicode时Windows的设计者又希望能在用户不注意的情况下同时兼容Unicode和非Unicode(Multiple byte)文本文件,就只能借助这种小trick了。相比之下,Linux这样的系统在多locale的环境中浸染的时间比较短,再加上社区本身也有足够的动力轻装前进(吐槽:微软对兼容性的要求确实是到了非常偏执的地步,任何一点破坏兼容性的做法都不允许,以至于很多时候是自己绑住自己的双手),所以干脆一步到位进入UTF-8。当然中间其实有一段过渡期,比如从最初全UTF-8的GTK+2.0发布到基本上所有GTK开发者都弃用多locale的GTK+1.2,我印象中至少经历了三到四年。

    BOM不受欢迎主要是在UNIX环境下,因为很多UNIX程序不鸟BOM。主要问题出在UNIX那个所有脚本语言通行的首行#!标示,这东西依赖于shell解析,而很多shell出于兼容的考虑不检测BOM,所以加进BOM时shell会把它解释为某个普通字符输入导致破坏#!标示,这就麻烦了。其实很多现代脚本语言,比如Python,其解释器本身都是能处理BOM的,但是shell卡在这里,没办法,只能躺着也中枪。说起来这也不能怪shell,因为BOM本身违反了一个UNIX设计的常见原则,就是文档中存在的数据必须可见。BOM不能作为可见字符被文本编辑器编辑,就这一条很多UNIX开发者就不满意。

     

    http://www.cnblogs.com/findumars/p/3620078.html

    =============================================

    Q: What is a BOM?

    A: UTF-8 编码的文件可以分为no BOM 和 BOM两种格式。

    何谓BOM? "EF BB BF" 这三个字节就叫BOM,BOM的全称叫做"Byte Order Mard".在utf-8文件中常用BOM来表明这个文件是UTF-8文件,而BOM的本意实在utf16中用来表示高低字节序列的。

    在字节流之前有BOM表示采用低字节序列(低字节在前面),而utf8不用考虑字节序列,所以其实有无BOM都可以。

     

    用以下方法就可以去掉BOM签名

    Code

    System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding(false);
    StreamWriter stream = new StreamWriter(Server.MapPath("normren.html"), false,utf8);
    stream.Write("Content");
    stream.Close();

     

     

    //以前看到有人好像要改写utf8让他不生成标记,大可不用那样,系统已经提供的相关功能了。  
                StreamWriter dout = new StreamWriter("1.html", false, new UTF8Encoding(false));  
                dout.Write("sdsdsd");  
                dout.Close(); 

    参考:http://blog.163.com/yanfeng_0/blog/static/6200414520096303911545/ 

     

    ==================================================

    BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记,在UTF-16里本来是FF FE,变成UTF-8就成了EF BB BF。这个标记是可选的,因为UTF8字节没有顺序,所以它可以被用来检测一个字节流是否是UTF-8编码的。微软做这种检测,但有些软件不做这种检测,而把它当作正常字符处理。

    微软在自己的UTF-8格式的文本文件之前加上了EF BB BF三个字节, windows上面的notepad等程序就是根据这三个字节来确定一个文本文件是ASCII的还是UTF-8的, 然而这个只是微软暗自作的标记, 其它平台上并没有对UTF-8文本文件做个这样的标记。

    也就是说一个UTF-8文件可能有BOM,也可能没有BOM,那么怎么区分呢?三种方法。1,用UltraEdit-32打开文件,切换到十六进制编辑模式,察看文件头部是否有EF BB BF。2,用Dreamweaver打开,察看页面属性,看“包括Unicode签名BOM”前面是否有个勾。3,用Windows的记事本打开,选择 “另存为”,看文件的默认编码是UTF-8还是ANSI,如果是ANSI则不带BOM。

    参考:http://blog.163.com/result_2205/blog/static/13981945020102954023564/

    更多相关内容
  • 发现是windows和Uinx文档编码错误,下面记录两种解决方法 1.执行命令 $ sed -i 's/\r//' filename 参考路径:https://www.jianshu.com/p/38ce1e368f19 2. 使用编辑器如Notepad++转换 参考路径: ...

    背景:

    在window创建了一个文件,编写sh脚本文件,执行的时候出现莫名奇怪的错误

    发现是windows和Uinx文档编码错误,下面记录两种解决方法

     

    1.执行命令

    $ sed -i 's/\r//' filename

    参考路径:https://www.jianshu.com/p/38ce1e368f19

     

    2. 使用编辑器如Notepad++转换

    参考路径:

    https://www.crifan.com/files/doc/docbook/rec_soft_npp/release/htmls/npp_func_windows_unix_mac.html

     

    3.13. Notepad++中Windows,Unix,Mac三种格式之间的转换

    由于历史原因,导致Windows,Unix/Linux,Mac三者之间,对于文件中所用回车换行符,表示的方法,都不一样。

    这就导致了很多人都会遇到回车换行符的困惑,和需要在不同格式间进行转换。

    其中,关于回车换行符的详细解释,去看这里[13]

     

    此处,介绍一下,如何通过Notepad++实现在这三者之间进行转换。

    3.13.1. 查看当前文件格式(换行符用的是什么字符)

    当前是Windows的平台,所以通过“显示所有字符”:

    默认所查看到的是Windows的CR LF:

    3.13.2. 从Windows转换为Unix/Linux格式

    然后去从当前的Windows的格式,转换为Unix格式:

    然后Windows的CR LF就都变成Unix/Linux的LF了:

    展开全文
  • 问题 作者在做CRF++在windows和linux下分词实验时遇到一个问题:明明文件编码格式都是utf-8,但是linux下的实验进行到测试时得到的测试...在Notepad++中可以看到都是UTF-8但是适用于不同系统,windowsUnix(Linux)。

    问题

    作者在做CRF++在windows和linux下分词实验时遇到一个问题:明明文件编码格式都是utf-8,但是linux下的实验进行到测试时得到的测试分词输出文件格式有误。
    错误示例:
    在这里插入图片描述正确显示应该为:
    在这里插入图片描述

    我们知道,代码思路,crf_learn,crf_test,libcrfpp.dll,template这些要用到的东西在windows和linux下都是一样的,那么我猜测就是还是编码问题。

    解决方法

    在Notepad++中可以看到都是UTF-8但是适用于不同系统,windows和Unix(Linux)。这里Notepad++可以右键windows处选择不同系统,完成转换。再用转换后的文件去做接下来的实验就没有问题了。
    windows下的文件:
    在这里插入图片描述
    linux下的文件:
    在这里插入图片描述
    window(CR LF)和Unix(LF)的差别就是换行符的差别,但在不同系统中可能会出现各种错误。
    在这里插入图片描述

    总结

    在不同系统,转换为不同系统的编码,同时注意一些差别,配置好后再运行就没有问题了

    展开全文
  • Windows下文本文件编码转换

    千次阅读 2020-06-18 20:59:17
    Windows下可以使用记事本进行文本文件的编码转换操作。 以下用示例来说明(本示例使用windows 7): 1, 打开 记事本 ,将以下文件内容复制到窗口中 时间序列存储在容器中,容器类型似于表,时间序列的数据是连续的...

    在Windows下可以使用记事本进行文本文件的编码转换操作。
    以下用示例来说明(本示例使用windows 7):

    1, 打开 记事本 ,将以下文件内容复制到窗口中

    时间序列存储在容器中,容器类型似于表,时间序列的数据是连续的。容器池是一组容器的集合。
    滚动窗口容器的概念,相关活动窗口、休眠窗口,分区销毁。
    数据类型和系统表:
    数据类型包括:CalendarPattern、Calendar、TimeSeries
    系统表包括:CalendarPatterns、 CalendarTable、TSInstanceTable、TSContainerTable
    

    另存为编码UTF-8格式
    保存为UTF-8编码格式
    显示文件
    显示文件

    2, 显示文件的大小

    文件大小
    注:
    为什么在Linux下该文本的大小为388字节,而windows下为394字节呢?
    原因是:Linux下使用\n表示换行,而windows下使用的是\r\n表示回车换行。因此每行都会多一个字节。
    这也是为什么把文件文件从windows传到Linux时,经常需要使用dos2unix进行转换的原因。

    3, 进行格式转换

    记事本 另存为 编码 ANSI 格式,将UTF-8转换成GBK(兼容)格式。
    另存为ANSI编码格式
    显示的文件大小为295字节。
    文件大小
    内容如下:
    显示文本内容

    同样的,我们也可以反向将GBK(兼容)格式转换成UTF-8格式。

    展开全文
  • WindowsUnix的Unicode实现的差别

    千次阅读 2017-10-11 14:45:28
    WindowsUnix的Unicode实现的差别
  • :set fileformat=unix 转载于:https://www.cnblogs.com/oDoraemon/p/7048890.html
  • 问题描述:对于我们来说在windows编码的直观和操作简单方便,不用记大量的编辑命令,动动鼠标就OK了。但是对于我们这些工作在Unix下的开发者来说,我们习惯于在windows下编辑,然后同步到unix下。也许你会发现当你...
  • 2016年1月28日 这个问题已经自己解决 file-setting下 左侧code style line separator下拉选择unix就可以了我在windows上开发的python想移植到linux上运行,如果用解释器是没有问题的,如python 文件名的方式[root@...
  • phpstorm设置换行兼容Windows(CRLF)和Linux(LF) 于现在大多数项目都是运行在 Linux 服务器上,很多PHP开发使用的是WINDOWS系统,最终导致在Windows上克隆的代码,提交到git上后,换行符都换成`CRLF` 了,在Linux平台上...
  • 字符编码基础 在谈c++之前,不得不先来说说各种字符编码。我们知道最早的英文字符采用ascii,因为英文字符很少,因此一个char就够用了。但是由于处理其他语言的需求,8位的char显然不够用,这就要求更多位数的编码。...
  • 区别:(1)Linux速度比较快,安全性比windows好(2)有很多软件只能在windows里运行,与Linux兼容的软件正在开发中.(3)Linux适用在网络方面.(4)Linux的操作比较复杂,windows的比较简单. Linux和Windows的区别和Linux ...
  • Git for Windows 使用指南

    千次阅读 2020-02-26 21:33:59
    参考文档 https://gitforwindows.org/
  • 将linux通过samba服务映射到windows平台,在win平台下建立一个脚本,然后切换到linux下执行,报错$’\r’: command not found。 原因 win平台下的换行是:回车符 + 换行符,也就是\r\n。unix下是换行符\n。linux下不...
  • 字符编码那些事--彻底理解掌握编码知识

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

    千次阅读 2021-05-20 03:19:22
    手机评站网今天精心准备的是《unicode编码转换》,下面是详解!关于vb,怎么把中文字符转换为Unicode码?“123,测试,test”转为003100320033002C6D4B8BD5002C00740065007300743002我用hex(ascw())来转结果是3132332...
  • Unicode编码详解(三):UTF-8编码

    千次阅读 2020-12-31 18:29:09
    Unicode编码详解(三):UTF-8编码 若觉得本文写得还可以,请多多关注本人所作书籍《C++语法详解》电子工业出版社出版,网盘地址: https://pan.baidu.com/s/1dIxLMN5b91zpJN2sZv1MNg 本文为原创文章,转载请注明出处...
  • iconv命令是运行于linux/unix平台的文件编码装换工具。当我们在linux/unix系统shell查看文本文件时,常常会发现文件的中文是乱码的,这是由于文本文件的编码与当前操作系统设置的编码不同而引起的,这时可以使用...
  • 对于Jmerter中需要使用中文字符时,我们一般用UTF-8编码,而且对于CSV Data Set Config的中文参数化,我们要求用编辑器(Sublime、UltraEdit等)保存为无BOM的UTF-8编码格式的,这是为什么呢?从下面的字符编码介绍...
  • linux & windows C++开发差异

    千次阅读 2017-11-03 17:46:19
    windows下不区分大小写,路径分隔符一般使用”\”;linux下区分大小写,路径分隔符使用”/”。 2、itoa()函数在linux下并不存在。 所以使用类似sprintf();之类的函数是个不错的替代。(为什么说是类似函数,看...
  • Universal Barcode Font Advantage可以在一个单一的字体中生成的多种条形码类型兼容多种操作系统并具有双字节字符集的语言,例如,日文,...支持多操作系统和多区域设置,包括Windows, MAC, Linux和Unix。 内含Tr...
  • url 编码(percentcode 百分号编码

    千次阅读 2015-11-18 08:41:23
     ... 摘要 本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码、为什么需要编码做了详细的说明,并对比分析了Javascrip
  • Different operating systems like Linux and Windows have different text file formats which arenot compatible with each other. While using these platforms to edit and read text file there will be probl....
  • 文本编码

    万次阅读 2016-03-01 00:05:49
    文本编码 文本编码这个问题自三年前就困扰着我,当时是用Python处理多国语言时出现的bug,最后问题解决了,但其中具体逻辑并不懂。后来零零散散接触了不少资料,算是大致弄明白,记录如下。 unicode与ascii等编码...
  • Django Web 项目在Windows环境的部署

    千次阅读 2022-04-05 08:28:53
    Django Web 项目以 Apache + mod_wsgi 模式在Windows环境的部署,后台数据库:Mysql
  • 如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件...
  • linux Shell脚本编码格式修改

    万次阅读 2018-02-24 14:10:44
    windows下写好的shell脚本,放到linux上执行,往往会因为编码格式的问题存在兼容问题:   -bash: ./lbs-circle-server.sh: /bin/sh^M: bad interpreter: No such file or directory 这是由于文件编码格式为...
  •   FatFs 中路径名的格式类似于 DOS/Windows 的文件名规格:[drive#:][/]directory/file。FatFs 支持长文件名(LFN)和 8.3 格式文件名(SFN)。 当 FF_USE_LFN >= 1 时,可以使用 LFN。与 DOS/Windows API 方式...
  • Linux和Unix区别学习总结

    千次阅读 2016-07-30 09:45:52
    UNIX与LINUX的区别 http://blog.csdn.net/preciousboy/article/details/5867382 UNIX是历史最悠久的通用操作系统。1969年,美国贝尔实验室的K.Thompson和D.M.Ritchie在规模较小及 较简单的分时操作系统...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,165
精华内容 10,466
关键字:

windows兼容unix编码

友情链接: Broadband-system.rar