Konvertiere ein Zeichen in Großbuchstaben

8

Ich habe eine Variable, die ein einzelnes char enthält. Ich möchte dieses char in Großbuchstaben umwandeln. Die Funktion to_uppercase gibt jedoch rustc_unicode::char::ToUppercase struct anstelle von char zurück.

    
Moebius 16.02.2016, 12:07
quelle

2 Antworten

10

ToUppercase ist ein Iterator, weil es mehr als eine Großbuchstabeversion eines Unicode-Zeichens gibt , da die Großbuchstabe des Zeichens aus mehreren Codepunkten bestehen kann, wie delnan in den Kommentaren gezeigt hat . Sie können das in einen Vektor von Zeichen umwandeln:

%Vor%

Dann sollten Sie diese Zeichen in einer Zeichenfolge sammeln, wie ker gezeigt.

    
Cecilio Pardo 16.02.2016, 12:15
quelle
14

Erklärung

ToUppercase ist ein Iterator , das mehr als ein char ergeben kann. Dies ist notwendig, da einige Unicode-Zeichen aus mehreren "Unicode Scalar Values" bestehen (was ein Rust char darstellt).

Ein schönes Beispiel sind die so genannten Ligaturen . Versuchen Sie dies zum Beispiel ( auf dem Spielplatz ):

%Vor%

Die 'fi' Ligatur ist ein einzelnes Zeichen, dessen Großbuchstabe aus zwei Buchstaben / Zeichen besteht.

Lösung

Es gibt mehrere Möglichkeiten, damit umzugehen:

  1. Arbeitet an &str : Wenn Ihre Daten tatsächlich in Zeichenfolgenform vorliegen, verwenden Sie str::to_uppercase , das ein String zurückgibt, mit dem man leichter arbeiten kann.
  2. ASCII-Methoden verwenden : Wenn Sie sicher sind, dass Ihre Daten nur ASCII sind und / oder Unicode-Symbole Sie nicht interessieren, können Sie std::ascii::AsciiExt::to_ascii_uppercase , das nur ein char zurückgibt. Aber es ändert nur die Buchstaben 'a' in 'z' und ignoriert alle anderen Zeichen!
  3. Gehen Sie manuell damit um : Sammeln Sie in einem String oder Vec wie im obigen Beispiel.
Lukas Kalbertodt 16.02.2016 21:01
quelle

Tags und Links