我的html文件中有BOM字符。我想删除它。我经常搜索并使用了很多脚本等等。但没有人工作。我也下载了notepad ++,但没有编码" UTF8没有BOM"在其编码菜单中。如何删除该BOM字符?感谢。
答案 0 :(得分:26)
答案 1 :(得分:4)
你可以使用vim解决问题,你可以轻松使用MinGW-w64(如果你已经安装了Git)或者Cygwin。
所以,关键是使用:
-b
,它将使用vim命令执行vim脚本。-n
,它将以二进制模式打开您的文件,您将看到那些笨拙的BOM字节echo 'gg"+gPggdtCZZ' > script
,这非常重要!此选项拒绝使用交换文件,因此您的所有工作都在内存中运行。它为您提供了保证,因为如果文件很大,交换文件可能会误导进程。那就是说,让我们去看代码吧!
首先创建一个简单的文件,这里名为' script',它将保存vim命令
vim -n -b <the_file> -s script
...这个奇怪的字符串告诉vim&#34; 转到文件的开头,复制第一个单词并将其粘贴到光标后面,所以删除所有内容直到字符&#39; C&#39 ;然后,保存文件&#34;
注意:如果您的文件以“C&#39;”以外的其他字符开头,则必须指定该文件。如果您有不同的第一个字符&#39;,您可以按照逻辑并创建一个bash脚本,该脚本将读取第一个字符并在上面的代码段中替换它。
运行vim命令:
{
"VCAP_SERVICES": {
"mongodb": [
{
"credentials": {
"hostname": "10.11.241.1",
"ports": {
"27017/tcp": "43417",
"28017/tcp": "43135"
},
"port": "43417",
"username": "xxxxxxxxxx",
"password": "xxxxxxxxxx",
"dbname": "gwkp7glhw9tq9cwp",
"uri": "xxxxxxxxxx"
},
"syslog_drain_url": null,
"volume_mounts": [],
"label": "mongodb",
"provider": null,
"plan": "v3.0-container",
"name": "mongodb-business-configuration",
"tags": [
"mongodb",
"document"
]
}
]
}
}
{
"VCAP_APPLICATION": {
"cf_api": "xxxxxxxxxx",
"limits": {
"fds": 16384,
"mem": 1024,
"disk": 1024
},
"application_name": "mock-service",
"application_uris": [
"xxxxxxxxxx"
],
"name": "mock-service",
"space_name": "xxxxxxxxxx",
"space_id": "xxxxxxxxxx",
"uris": [
"xxxxxxxxxx"
],
"users": null,
"application_id": "xxxxxxxxxx",
"version": "c7569d23-f3ee-49d0-9875-8e595ee76522",
"application_version": "c7569d23-f3ee-49d0-9875-8e595ee76522"
}
}
答案 2 :(得分:0)
我认为这不应该成为问题。 是时,问题BOM仅为3个字节EF BB BF
。我们不能删除它吗?还是更改为其他内容然后再次关闭文件?
无论如何,下面的内容可以解决问题,并将BOM更改为“ ***”。运行为
x file
其中file是文件名。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
const unsigned char BOM[3] = { '\xEF', '\xBB', '\xBF' };
char file_name[64] = { "target.csv" };
if (argc > 1) strcpy(file_name, argv[1]);
FILE* one = fopen(file_name, "r+b");
if (!one) return -1;
unsigned char buffer[64];
int n = fread(buffer, 1, 3, one);
if (n != 3)return -2;
if (memcmp(buffer, BOM, 3) != 0)
{ printf("file '%s' has no BOM\n", file_name);
fclose(one);
return 0;
};
n = fseek(one, 0, SEEK_SET);
if (n != 0) return -3;
buffer[0] = buffer[1] = buffer[2] = '*';
n = fwrite(buffer, 1, 3, one);
if (n == 3)
printf("Byte Order Mark changed to '***'\n");
else
printf("Error writing to file\n");
fclose(one);
return 0;
}