2016-08-03 31 views
0

In meinem Programm werde ich einige Zeichenfolgen verarbeiten. Diese Strings können aus jeder Sprache sein. (Z. B. Japanisch, Portugiesisch, Mandarin, Englisch und etc.)Erkennen von Sonderzeichen in einem Text in C#

Irgendwann diese Strings können einige HTML-Sonderzeichen wie Markensymbol enthalten (), registriert Symbol (®) Copyright symbol (©) und usw.

Dann werde ich ein Excel-Blatt mit diesen Details generieren. Wenn es sich jedoch um ein Sonderzeichen handelt, obwohl die Excel-Datei erstellt wurde, kann sie nicht geöffnet werden, da sie scheinbar beschädigt ist.
Also was ich getan habe, ist codieren Zeichenfolge vor dem Schreiben in Excel. Aber was als nächstes passierte, war, dass alle Strings außer Englisch kodiert waren. Das Bild zeigt, dass die Anlagenbeschreibung, die ein Text in japanischer Sprache ist, auch in einen codierten Text umgewandelt wird. Aber ich wollte nur Sonderzeichen codieren.
enter image description here

゜ 祌 づ り ゅ 氧 廩, 駤 び ょ 菣 鏥 こ 埣 槎 で umgewandelt wird ゜祌づ りゅ氧廩, 駤びょ菣 鏥こ埣槎で Aber ich wollte nur codierte Sonderzeichen.

Also was ich brauche, ist zu identifizieren, ob die Zeichenfolge diese Art von Sonderzeichen enthält. Da es sich um mehrere Sprachen handelt, gibt es eine Möglichkeit zu identifizieren, ob die Zeichenfolge ein HTML-Sonderzeichen enthalten?

+0

Warum wollen Sie wissen, ob Sie Sonderzeichen haben ? Wie ist das ein Problem? * "Da ich mit mehreren Sprachen zu tun habe" * - der * Code * dieser Zeichen bleibt die gleiche Missachtung der Sprache (jede Sprache kann mehr * spezielle * Zeichen hinzufügen, aber die Frage ist, was sie besonders macht), so ist die Frage ziemlich vage. – Sinatr

+4

Mögliches Duplikat von [Auf Sonderzeichen prüfen (/ \ * - + \ _ @ & $ #%) in einem String?] (Http://stackoverflow.com/questions/4503542/check-for-special-characters-in -a-string) – Sinatr

+0

Eigentlich werde ich diese Zeichenfolge in ein MS Excel Sheet schreiben. Wenn die Zeichenfolge ein Sonderzeichen enthält, erschien das generierte Excel-Blatt als beschädigt. Also, was ich getan habe, ist codieren Zeichenfolge vor dem Schreiben der Excel-Tabelle. Was dann passiert ist, dass der gesamte Text von anderen Sprachen außer Englisch auch kodiert ist. Aus diesem Grund muss ich herausfinden, ob die Zeichenfolge diese Sonderzeichen enthält. – Punuth

Antwort

1

Versuchen Sie, die Regex.Replace Methode:

// Replace letters and numbers with nothing then check if there are any characters left. 
// The only characters will be something like $, @, ^, or $. 
// 
// [\p{L}\p{Nd}]+ checks for words/numbers in any language. 
if (!string.IsNullOrWhiteSpace(Regex.Replace(input, @"([\p{L}\p{Nd}]+)", ""))) 
{ 
    // Do whatever with the string. 
} 

Detection demo.

+0

Vielen Dank für Ihre Antwort. Und ich will das wissen, gibt es eine Möglichkeit, alle Sonderzeichenlisten zu bekommen, anstatt sie nur hart im Regex zu codieren? – Punuth

+0

Funktioniert es für jede Sprache? – Punuth

+0

Eigentlich schaue ich mir gerade das an ... –

0

Ich nehme an, dass Sie durch die Behandlung Ihrer Zeichenfolge als Char Array https://msdn.microsoft.com/en-us/library/system.char(v=vs.110).aspx Dann können Sie prüfen jedes Zeichen wiederum beginnen konnte. Tatsächlich auf einer zweiten Lese dieser Hilfeseite, warum dies nicht nutzen:

string s = "Sometime these strings may contain some HTML special characters like trademark symbol(™), registered symbol(®), Copyright symbol(©) and etc.゜祌づ りゅ氧廩, 駤びょ菣 鏥こ埣槎で"; 
Char[] ca = s.ToCharArray(); 
foreach (Char c in ca){ 
    if (Char.IsSymbol(c)) 
     Console.WriteLine("found symbol:{0} ",c); 
} 
+1

Ein String * ist * ein Char-Array ... –

+0

Ja, das ist wahr, ich sollte sagen, als char-Array behandeln und diese Methode aufrufen. – SlightlyKosumi

1

Versuchen Sie das Regex.IsMatch Verfahren mit:

string str = "*!#©™®"; 
var regx = new Regex("[^a-zA-Z0-9_.]"); 
if (regx.IsMatch(str)) 
{ 
    Console.WriteLine("Special character(s) detected."); 
} 

See the Demo