2017-09-13 3 views
0

ich die obige Fehlermeldung erhalten, wenn ein string zu einem int in C# zu konvertieren versuchen. Mir ist klar, dass das Problem viele Male diskutiert wurde, aber keine der vorgeschlagenen Lösungen funktionierte für mich. Ich bekomme meine Zeichenfolge aus dem Lesen einer CSV-Datei mit StreamReader.ein mehr „Input-String war nicht im richtigen Format“ C#

Printing it using Debug.Log("str") returns "17".

jedoch alle unten stehenden Versuche führten zu den gleichen Fehler:

 //int value = int.Parse(str); 
     //int value = Int32.Parse(str); 
     //int value = Convert.ToInt32(str.Replace(" ", "")); 
     //Int32 value = Int32.Parse(str); 
     //int value = int.Parse(str.Trim()); 
     //int value = int.Parse(str.ToString().Trim()); 
     //int value = int.Parse(str.ToString().Replace(" ", "").Trim()); 
     //int value = int.Parse(str.Replace(" ", "")); 
     //int value = Convert.ToInt32(str); 
     //int value = Convert.ToInt32(str.ToString().Replace(" ", "").Trim()); 
     //decimal value = decimal.Parse(str); 
     //decimal value = Convert.ToDecimal(str); 
     //float value = float.Parse(str); 

Using Int32.TryParse(str, out value); returns 0 and does not help.

Bin ich etwas offensichtlich hier fehlt?

+6

erkennen kann, sollten Sie die tatsächliche * Eingabe * enthalten, nicht nur das Ergebnis, das du bekommst. Was * ist * 'str'. – HimBromBeere

+0

https://stackoverflow.com/help/mcve –

+0

Wenn Sie eine csv lesen Sie Linie str.Split mit Split muss (new char [] { ''}) ToArray(). – jdweng

Antwort

0

Nicht alle Symbole sind sichtbar, zB:

http://www.fileformat.info/info/unicode/char/200B/index.htm

http://www.fileformat.info/info/unicode/char/2063/index.htm

Deshalb, wenn wie diese unheimliche Fehler mit (int.TryParse(str, out val) == false und Console.Write(str); kehrt 17) Ich schlage vor, Dumping die tatsächlichen string:

string str = "1\u20637"; // 17 with invisible separator between 1 and 7 

    // dump: hex representation followed by string representation 
    string dump = $"{string.Join(" ", str.Select(c => ((int)c).ToString("x4")))} '{str}'"; 

    Console.Write(dump); // or Debug.Log or what ever 

Wenn die Speicher-Abbild gebaut haben (bitte beachten Sie die unschuldige String-Darstellung - '17')

0031 2063 0037 '1⁣7' 

Sie leicht falsch Handelnden \u2063 in dem obigen Code

Verwandte Themen