1

文字列配列から文字列を取得して整数に変換しようとすると、奇妙な問題が発生します。このコード スニペットを見てください。

string date = "‎21/‎07/‎2010 ‏‎13:50";
var date1 = date.Split(' ')[0];
string[] dateArray = date1.Split('/');

string s = "21";
string t1 = dateArray[0];

bool e = string.Compare(s, t1) == 0;        //TRUE

int good = Convert.ToInt32(s);            //WORKING!
int bad = Convert.ToInt32(t1);  //Format exception - Input string was not in a correct format.

t1 では失敗するのに、s での変換が機能する理由を誰かが説明できますか?

4

2 に答える 2

7

文字列が隠し文字でいっぱいになっているため、文字列が壊れています。4U+200Eつと1つですU+200F

試してみるきれいな文字列は次のとおりです。

string date = "21/07/2010 13:50";
于 2012-12-07T20:05:04.440 に答える
1

string.Compare(s, t1) == 0文字列が等しいかどうかをテストするために使用するのはなぜですか? この のオーバーロードCompareは、カルチャに依存した比較を行います。しかし、文字列が同一であるという意味ではありません。char文字列が同一の値の「シーケンス」で構成されているかどうかを確認するには、序数比較を使用します。序数比較は、たとえば次のように行うことができます。

bool e = s == t1;

あなたの場合、文字列には異なるLengthがあり、最初のインデックスでも異なりますs[0] != t1[0]

文字列date右から左へのマーク左から右へのマークが含まれています。これは、アラビア語のテキスト (または「間違った」方向で書かれた別の言語) からコピーして貼り付けたために発生する可能性があります。

文字列の末尾(中央ではなく) にあるこれらの文字を削除するには、次のようなものを使用できます。

t1 = t1.Trim('\u200E', '\u200F');
于 2012-12-07T20:57:19.457 に答える