4

C# .NET Framework 1.1:我正在尝试用普通的单引号替换法语引号字符。它在我们的大多数开发环境(机器)上工作,但是当移动到系统测试环境时,出现string cannot be of zero length错误。

这是我的代码:

//replace French Quote with normal single Quote
fileColumnName = "date d’embauche";
fileColumnName = fileColumnName.Replace("’","'");

测试环境中的字符编码是否存在问题?

更新:忘了提:它是一个 COM+ 组件;我们在 COM+ 中有字符编码设置吗?

抱歉不是很清楚;这是代码的很大一部分:它可能会令人困惑,所以要说清楚:

fileData是一个数据表 (System.Data.Table),由 OLEDB 连接到 CSV 文件填充。然后我得到与存储在数据库中的名称(headerData)进行比较的列名。

//#5:  Invalid header row check
foreach(DataRow hrow in headerData.Rows)
{

        columnNameEnglish = hrow["EnglishDisplayValue"].ToString().ToLower();                //get english column definition
        columnNameFrench = hrow["FrenchDisplayValue"].ToString().ToLower();                        //get french column definition
        columnIndex = Convert.ToInt32(hrow["DataBaseValue"]);                                                //get corresponding index
        fileColumnName = fileData.Columns[columnIndex].ColumnName.ToLower();

        //replace french Quote with normal Quote
        fileColumnName = fileColumnName.Replace("’","'");

        //check English
        if(fileColumnName.IndexOf(columnNameEnglish) < 0)
        {        
                //check French
                if(fileColumnName.IndexOf(columnNameFrench) < 0)
                {        
                        //invalid row 
                        errs.Add("81181");
                        break;
                }
        }                                        
}
4

2 回答 2

0

在我看来,由于某种原因,您尝试替换的字符串的长度为 0。这表明问题与您从数据库中检索到的列的内容有关。因此,我建议您在尝试替换之前检查您的代码是否字符串为空或空。

于 2013-11-11T16:37:30.917 回答
0

我找到了解决我的问题的方法。我发现它的某个时候回来,但忘了在这里更新。

感谢@Ben。根据他的建议,我使用了 Unicode 文字 ('\u2019'),它唤醒了它的魅力。我猜这是测试服务器的 CodePage 问题,但这不会影响 Unicode 文字。

谢谢

于 2013-11-29T23:21:19.440 回答