在中国(繁体)机器上使用 c# 更新 web.config 后出现乱码

Garbage characters after update of web.config using c# on China (Traditional) machine

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

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

???<?xml version="1.0" encoding="utf-8"?>

请指点一下这个问题怎么解决。

下面是Installshield代码

我正在使用 installscript 找到连接字符串占位符并将其替换为安装时生成的连接字符串。

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;

文件开头有一个字节顺序标记 (BOM)。

我怀疑发生的事情是您以不同的编码打开了一个 UTF8 编码的文件。这误读了不必要的 BOM 并损坏了它。保存时,未知字符标记替换了 BOM。

要纠正此问题,您需要将您的配置编码为不带 BOM 的 UTF8。除非您的文件中有 ASCII 范围之外的其他字符,否则编辑应该是安全的。