在中国(繁体)机器上使用 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 范围之外的其他字符,否则编辑应该是安全的。
我正在使用 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 范围之外的其他字符,否则编辑应该是安全的。