Zeichen aus anderen Sprachen finden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    Eine Möglichkeit könnte Regex sein, da kannst du z.B. so checken, ob ein String einen Nicht-Ascii-Character beinhaltet:

    VB.NET-Quellcode

    1. Dim Test As String = "xyz"
    2. If (Regex.IsMatch(Test, "[^\u0000-\u007F]+")) Then 'Falls Solch ein non-ascii-Zeichen vorkommt
    3. Return True
    4. Else
    5. Return False
    6. End If


    Da müsste man aber das Pattern anpassen (sofern du das möchtest), da er so auch bei äüö etc. True returned.


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza

    VB.NET-Quellcode

    1. If DeinText.Select(Function(x) Char.IsLetter(x) AndAlso Not "hierAlleNichtfremdenBuchstabenInGroß".Contains(x.ToUpper)) Then

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Strings bzw. Chars sind pro Zeichen 2 Byte lang. Die meisten Zeichen sollten so abgedeckt sein.

    Es sollte also kein Problem sein, die (auch Chinesische Zeichen) in einem String über IndexOf(..) zu finden. Dein Zeichen hat glaube ich die Zahl 269.

    Anderseits wäre es noch interessant was schlussendlich erreicht werden soll.

    Freundliche Grüsse

    exc-jdbi
    Hmm … klingt wie ein Bondrucker, der nur wenige Zeichen erlaubt. Das kenn ich von Epson. Da kann man erstmal nur wenige Zeichen drucken, bis man den Zeichensatz umstellt. Dann hat man die Möglichkeit, zumindest etwas mehr zu drucken. Ist aber etwas frickelig, weil man nur mit »Bytebefehlen« arbeiten kann. Wie ist die Situation bei Dir? Geht das in die Richtung?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    weil man nur mit »Bytebefehlen« arbeiten kann.

    Ja quasi, das sind alte Zebradrucker, die drucken u.a. mit einem zplII code. Man kann quasi über den Standardeditor wysiwyaf-artig drucken.
    Aber die drucken mir kein Hatschek oder so, deswegen muss ich es ersetzen.
    Naja mit euren Beispielen kann ich da schon ein bissle was machen.
    Ab Seite 361, Kapitel Code Pages des ZPL II Guides sind alle Zeichen drin. Anscheinend muss man auch hier den Zeichensatz / die Code Page ändern. Vielleicht geht das auch während des Betriebs. Ich hatte das bei mir so gemacht, dass ich einen Text Zeichen für Zeichen in den Druckpuffer schreibe und wenn ich auf ein zeichensatzinkompatibles Zeichen gestoßen bin, hab ich den Befehl für nen Zeichensatzwechsel gegeben, dann das gewünschte Zeichen in den Puffer gepackt und dann wieder zurück zum Standardzeichensatz umgeschaltet. Vielleicht klappt das auch mit ZPL II.
    Ab Seite 111 ist wohl auch der CodePage-Wechselbefehl.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ist irgendwie schon eine verzwickte Sache. Das ganze CodePage-Zeugs dürfte aber erst ganz am Schluss kommen.

    Wenn man die Zeichen finden will im String müssen sie auch als entsprechendes Zeichen im String sein. Wenn ein Codepage wie z.B. 1256 verwendet wird kann es unter Umständen nicht mehr erkannt werden.

    Hab es jetzt gerade wieder mal ausprobiert.

    C#-Quellcode

    1. private static char Chr(int chrcode, string culturename = "en-US")
    2. {
    3. //https://stackoverflow.com/a/37870346
    4. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    5. int page = CultureInfo.GetCultureInfo(culturename).TextInfo.ANSICodePage;
    6. var encoding = Encoding.GetEncoding(page);
    7. var bytes = encoding.GetBytes(new char[]{(char)chrcode });
    8. var bytesutf8 = Encoding.Convert(encoding, Encoding.UTF8, bytes);
    9. string stringutf8 = Encoding.UTF8.GetString(bytesutf8);
    10. return stringutf8[0];
    11. }
    12. private static char Chr(string strhtml, string culturename = "en-US")
    13. {
    14. //https://stackoverflow.com/a/37870346
    15. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    16. int page = CultureInfo.GetCultureInfo(culturename).TextInfo.ANSICodePage;
    17. var encoding = Encoding.GetEncoding(page);
    18. var bytes = encoding.GetBytes(strhtml);
    19. var bytesutf8 = Encoding.Convert(encoding, Encoding.UTF8, bytes);
    20. string stringutf8 = Encoding.UTF8.GetString(bytesutf8);
    21. return stringutf8[0];
    22. }
    23. private static char ChrCode(int chrcode, string culturename = "en-US")
    24. {
    25. //https://stackoverflow.com/a/37870346
    26. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    27. int page = CultureInfo.GetCultureInfo(culturename).TextInfo.ANSICodePage;
    28. var encoding = Encoding.GetEncoding(page);
    29. var bytes = encoding.GetBytes(new char[] { (char)chrcode });
    30. var bytesutf8 = Encoding.Convert(encoding, Encoding.UTF8, bytes);
    31. return Encoding.UTF8.GetString(bytesutf8)[0];
    32. }