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+ に文字エンコーディング設定はありますか?

よくわかりませんでした。コードの大部分は次のとおりです。混乱を招く可能性があるため、明確にするために:

fileDataCSV ファイルへの OLEDB 接続によって設定されるデータ テーブル (System.Data.Table) です。次に、データベースに格納されている名前 (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 になっているようです。これは、DB から取得した列の内容に問題があることを示しています。そのため、置換を試みる前に、文字列が null または空であるかどうかをコードで確認することをお勧めします。

于 2013-11-11T16:37:30.917 に答える
0

問題の解決策を見つけました。いつか見つけたのですが、ここで更新するのを忘れていました。

@ベンに感謝します。彼の提案に従って、私は Unicode リテラル ('\u2019') を使用しました。テスト サーバーの CodePage の問題だったと思いますが、これは Unicode リテラルには影響しません。

ありがとう

于 2013-11-29T23:21:19.440 に答える