Asp.net 在中国(传统)计算机上使用c#更新web.config后的垃圾字符
我正在使用installshiled脚本动态更新Asp.net mvc的web.config文件 它在所有机器上都能正常工作;它是如何产生的???在web.config文件开头的中文机器上的字符如下Asp.net 在中国(传统)计算机上使用c#更新web.config后的垃圾字符,asp.net,character-encoding,web-config,installshield,byte-order-mark,Asp.net,Character Encoding,Web Config,Installshield,Byte Order Mark,我正在使用installshiled脚本动态更新Asp.net mvc的web.config文件 它在所有机器上都能正常工作;它是如何产生的???在web.config文件开头的中文机器上的字符如下 ???<?xml version="1.0" encoding="utf-8"?> 文件开头有一个字节顺序标记(BOM) 我怀疑发生的事情是您以不同的编码方式在中打开了一个UTF8编码的文件。这会误读不必要的BOM表并损坏它。保存时,未知的字符标记将替换BOM表 要纠正这一点,您需要将
???<?xml version="1.0" encoding="utf-8"?>
文件开头有一个字节顺序标记(BOM) 我怀疑发生的事情是您以不同的编码方式在中打开了一个UTF8编码的文件。这会误读不必要的BOM表并损坏它。保存时,未知的字符标记将替换BOM表
要纠正这一点,您需要将配置编码为UTF8,而不包含BOM表。编辑应该是安全的,除非您的文件中有ASCII范围之外的其他字符。在我看来,您在文件的开头有一个字节顺序标记(BOM)。我怀疑发生的事情是您以不同的编码方式在中打开了一个UTF8编码的文件。这会误读不必要的BOM表并损坏它。保存时,未知字符标记替换了BOM。谢谢,您说得对,可能是BOM问题。如何避免使用installscriptEncode将配置编码为UTF8,而不使用BOM表。编辑应该是安全的。谢谢,它工作了,在notepad++中更新的文件没有BOMYour XML文件转换是不符合的。这是由于编程环境的限制吗?你能改用XSLT吗?
szIniFile = INSTALLDIR^"AppDir\\Web.config";
szSearchStr = "[COONECTIONSTRING]";
FindAndReplaceInFile(szIniFile, szSearchStr,strWebConString);
function FindAndReplaceInFile(szFile, szSearchStr,szReplaceStr)
STRING szReturnLine,szString, szSecPart,szFirstPart,svString,szArchive;
NUMBER nResult,nSubPos,nSearchStrLen,nLineNumber;
begin
nSearchStrLen = StrLength(szSearchStr);
nResult=FileGrep (szFile, szSearchStr, szReturnLine, nLineNumber,
RESTART) ;
NumToStr ( svString, nResult );
while (nResult=0)
nSubPos = StrFind(szReturnLine, szSearchStr); //get position of szSearchStr
StrSub (szFirstPart, szReturnLine, 0, nSubPos);
StrSub (szSecPart, szReturnLine, nSubPos+nSearchStrLen, StrLength(szReturnLine));
szString="";
szString = szFirstPart+szReplaceStr+szSecPart;
FileInsertLine (szFile, szString, nLineNumber, REPLACE);
nLineNumber = nLineNumber + 1;
nResult=FileGrep (szFile, szSearchStr, szReturnLine, nLineNumber,CONTINUE) ;
endwhile;
end;