Asp.net 在中国(传统)计算机上使用c#更新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表 要纠正这一点,您需要将

我正在使用installshiled脚本动态更新Asp.net mvc的web.config文件

它在所有机器上都能正常工作;它是如何产生的???在web.config文件开头的中文机器上的字符如下

???<?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;