File <;0xEF、0xBB、0xBF>;文件中显示的字符。如何移除它们?
我正在压缩JavaScript文件,压缩器抱怨我的文件中有File <;0xEF、0xBB、0xBF>;文件中显示的字符。如何移除它们?,file,unicode,utf-8,utf,File,Unicode,Utf 8,Utf,我正在压缩JavaScript文件,压缩器抱怨我的文件中有ï»字符 如何搜索并删除这些字符 perl -pi~ -CSD -e 's/^\x{fffe}//' file1.js path/to/file2.js 如果您的文件中有其他utf-8,我假设该工具将崩溃,但是如果没有,也许这个解决方法可以帮助您。(未经测试…) 编辑:根据tchrist的评论,添加了-CSD选项。@tripleee的解决方案对我不起作用。但是将文件编码更改为ASCII,然后再次更改为UTF-8就成功了:-)您可以使用v
ï»
字符
如何搜索并删除这些字符
perl -pi~ -CSD -e 's/^\x{fffe}//' file1.js path/to/file2.js
如果您的文件中有其他utf-8,我假设该工具将崩溃,但是如果没有,也许这个解决方法可以帮助您。(未经测试…)
编辑:根据tchrist的评论,添加了
-CSD
选项。@tripleee的解决方案对我不起作用。但是将文件编码更改为ASCII,然后再次更改为UTF-8就成功了:-)您可以使用vim轻松删除它们,以下是步骤:
1) 在终端中,使用vim打开文件:
vim file_name
2) 删除所有字符:
:set nobomb
3) 保存文件:
:wq
在windows中,您可以从中使用后端口重新编码实用程序。感谢前面的回答,这里有一个sed(1)变体,以防万一:
sed '1s/^\xEF\xBB\xBF//'
使用tail可能更容易:
tail --bytes=+4 filename > new_filename
删除这些字符的另一种方法-使用Vim: vim-b文件名 现在,这些“隐藏”字符可见(
)并且可以删除。中,您可以安装,然后在用户设置中自定义正则表达式
在这里,我将\uFEFF
添加到highlighter\u regex
属性的末尾
{
“highlighter_enabled”:正确,
“highlighter_regex”:“(\t++)|”(++\t+)|[\u2026\u2018\u2019\u201c\u201d\u2013\u2014\uFEFF]|[\t]+$”,
“荧光灯范围名称”:“无效”,
“荧光笔最大文件大小”:1048576,
“荧光灯延迟”:3000
}
要覆盖默认包设置,请将文件放在此处:
~/.config/sublime-text-3/Packages/User/highlighter.sublime-settings
在Unix/Linux上:
sed 's/\xEF\xBB\xBF//' < inputfile > outputfile
sed的/\xEF\xBB\xBF/'outputfile
在MacOSX上
sed $'s/\xEF\xBB\xBF//' < inputfile > outputfile
sed$'s/\xEF\xBB\xBF/'outputfile
注意mac的sed后面的$ 在Windows上
有一个增强版的sed。对于Windows,这是一个独立的.exe,用于从命令行运行。保存不带代码签名的文件。我使用了vimgrep
:vim "[\uFEFF]" *
也是正常的vim搜索命令
/[\uFEFF]
“文件”命令显示BOM表是否存在: 例如:“file myfile.xml”显示:“xml 1.0文档,UTF-8 Unicode(带BOM)文本,具有很长的行,带有CRLF行终止符” dos2unix将删除BOM。我建议使用“dos2unix”工具,请测试运行
dos2unix./thefile.js
如有必要,尝试对多个文件使用类似的方法:
for x in $(find . -type f -exec echo {} +); do dos2unix $x ; done
我的问候。那不是
,那是
那是UTF8文件的BOM表,所以你应该更改标题。您希望如何删除它们?由魔法仙女?通过命令行工具?一个接一个地编辑?记事本++可以将编码更改为UTF8,而无需BOM表。例如,在Google上搜索5秒钟“strip BOM utf8”,我在Linux上发现了这样一个问题:如果您告诉我们您使用什么javascript工具进行压缩,在什么平台上进行压缩,以及构建过程中使用了哪些其他工具,那么它可能会帮助您获得与您的问题具体相关的答案。UTF-8中的BOM绝对是crud。您需要找到该文件的制作人,并告诉他们将其剪切成@#%%@peterflynn:U+FEFF
是用于BOM的Unicode代码点,但BOM本身就是该代码点的编码方式(UTF-8:0xEF 0xBB 0xBF
,UTF-16LE:0xFF 0xFE
,UTF-16BE:0xFE 0xFE
,等等)。因此,所讨论的文件是UTF-8编码的,压缩程序在将它们解码为实际的Unicode码点时会检测到它。@xanatos不管它是什么,这就是它的表现方式,这就是人们使用搜索引擎可以轻松找到这个问题的方式。您需要使用-CSD
开关运行,或者将PERL\u UNICODE
envariable设置为SD
,这样就可以了。Regexp可以删除行首的字符,替换行中的所有字符:“s/\x{fffe}//g”。在Mac OSX上,我必须改为:PERL-CSD-pe's/^\x{feff}/'file.csv
,请注意从到的更改。@mpetti这不是一个BOM表,而是一个字节颠倒的BOM表。这可能发生在任何平台上,如果您将UTF-16转换为UTF-8并获得错误的字节顺序(即使BOM的目的是防止该错误!)@blong怎么办?如果你不能理解它,可以问一个单独的问题(但它可能会被标记为重复的;第一次谷歌点击)。其他来源建议将图1添加到pattern中,如“sed'1s/\xEF\xBB\xBF/'”,只匹配第一行。然而,对我来说,在MacOSX上,这两种方法都不起作用。这是有效的,对我来说是最好的解决方案。谢谢你,先生!我喜欢这个解决方案。易于实施且仍可扩展…:)@Marian有点晚了,但是你可以检查一下为什么它在mac上不起作用。将-i添加到sed以使用更改更新文件。这个解决方案对我很有效。它比所选答案更简单。ThanksI使用了这个伟大的解决方案,尽管我通常是emacs的支持者。vim FTW在文件生产者删除BOM后,该技术将失败。不可扩展…:)“注意mac的sed后面的$”-谢谢你,先生!Bash“C-style”字符串$'\xEF\xBB\xBF/'
是Bash的一种功能,特别是Mac或OSX功能。通过这种构造,Bash将把转义序列解析为实际字节,然后将命令行传递给sed。取决于你的sed
变体,这可能有效,也可能无效(尽管我确信OSX用户知道它应该为他们开箱即用是很有用的)。也许sed-I的/../…/“我喜欢你的答案-bomstrip
在我的mac电脑上不容易获得-所以花点时间给你一个简单的版本:find-泰