一个文件编码的问题
本文可自由转载,但请遵循“署名-非商业用途-保持一致”的创作共用协议。 永久链接:JoeCen's 小猫窝-----------------------------
昨天某个项目的同事给了一个sql文件,用来导入mysql数据库。
用vi打开检查过没有问题,谁知道用“mysql”命令导入的时候提示说第一行有语法错误。再用vi打开文件,看来看去都没有发现错误,甚至将第一行都删掉了,mysql还是说有错误。无意中用“more”打开了文件,发现第一行的开头居然出现了乱码,随后用“cat”和“less”看,结果也是有乱码。
于是用“od”命令打开该文件,发现改文件前面存在着“EF BB BF”字符,记得应该是和编码有关系。google之,结果很快出来了,文件前面的“EF BB BF”字符表示该文件是“UTF-8”编码的。这几个字符叫做“BOM”,意思是“Byte Order Mark”。BOM的作用是标记文件的编码是什么,Windows就是使用BOM来标记文本文件的编码方式的,不过并不是所有的软件都知道有“BOM”,所以我用vi的时候打开文件就懂得忽略BOM标记,而用”mysql“、“cat”、“more"、”less“等命令就会把”BOM“标记也显示出来了,变成乱码。
问了一下同事,他果然是用notepad来编辑文件,然后在保存的时候选了”utf-8“,所以才会让我碰到了这个问题。解决方法很简单,用UltraEdit或者notepad将该文件保存为ANSI就可以了。
如果对文件编码有兴趣,可以看一下下面的链接:
谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
字符编码笔记:ASCII,Unicode和UTF-8