2010-12-30 13 views
0

Ich bin auf der Suche nach einer Möglichkeit, Unicode UTF-32 (int) in Kleinbuchstaben zu konvertieren. In Java, so etwas wie dies, würde den Trick:C# UTF-32 ToLower

Character.toChars(Character.toLowerCase(Character.codePointAt(text, i))) 

ich UTF-32 von Char.ConvertToUtf32, aber es scheint nicht so zu sein Fall diesen Wert zu senken.

UPDATE: Ich habe es mit einem Strom/Array von Zeichen, ich habe die Codepunkte durch die Suche nach dem Hallo Ersatz, etwas ähnlich wie die Java-Schnipsel oben gefunden. Das Konvertieren in String wird zu ineffizient sein.

+0

Ist es möglich, an die Bytes zu kommen, die die Utf32-Daten bilden? –

+0

Ja, ich habe das Array von Zeichen. – Scott

+0

Ich habe meine Antwort aktualisiert. –

Antwort

0

Die einzige integrierte Möglichkeit ist das Konvertieren des UTF-32 in einen String. So etwas wie das Folgende sollte funktionieren:

static Int32 ToLower(Int32 c) 
{ 
    // Convert UTF-32 character to a UTF-16 String. 
    var strC = Char.ConvertFromUtf32(c); 

    // Casing rules depends on the culture. 
    // Consider using ToLowerInvariant(). 
    var lower = strC.ToLower(); 

    // Convert the UTF-16 String back to UTF-32 character and return it. 
    return Char.ConvertToUtf32(lower, 0); 
} 

Sie geben an, dass dies für Ihre Anforderungen ineffizient ist. Hast du es bewertet?

Wenn Sie immer noch darauf bestehen, Gehäuse auf UTF-32 zu machen, dann müssen Sie Ihre eigenen rollen. Glücklicherweise hat das Unicode-Konsortium die meiste harte Arbeit geleistet. Werfen Sie einen Blick auf den Unicode case folding file. Analysieren Sie diese Datei, indem Sie die Daten in einer geeigneten Struktur speichern. Dann kann das Gehäuse direkt mit Ihren Daten in dem von Ihnen bevorzugten Format bearbeitet werden.

+0

Wenn Sie "ToLowerInvariant" in Betracht ziehen, denken Sie daran, was in der Türkei passiert, wenn Sie "I" in Kleinbuchstaben schreiben. –