Wie bekomme ich den dezimalen Wert eines unicode-Zeichens in C#?
Wie bekomme ich den numerischen Wert eines unicode-Zeichen in C#?
Zum Beispiel, wenn tamil Charakter அ
(U+0B85) gegeben, die Ausgabe sollte 2949
(d.h. 0x0B85
)
Siehe auch
- C++: Wie man dezimale Wert eines unicode-Zeichen in c++
- Java: Wie kann ich ein Unicode-Zeichen - code?
Multi-code-Punkt-Zeichen
Einige Zeichen erfordern mehrere code-Punkte. In diesem Beispiel, UTF-16, jeder code-Einheit ist immer noch in der Basic Multilingual Plane:
- (d.h.
U+0072
U+0327
U+030C
) - (d.h.
U+0072
U+0338
U+0327
U+0316
U+0317
U+0300
U+0301
U+0302
U+0308
U+0360
)
Den größeren Punkt, dass man "Zeichen" können benötigen mehr als 1 UTF-16-code-unit, kann es erforderlich sein, mehr als 2 UTF-16 code-Einheiten, kann es erforderlich sein, mehr als 3 UTF-16 code-Einheiten.
Den größeren Punkt, dass man "Charakter" können, erfordern Dutzende von unicode-Codepunkten. In UTF-16-in C# - das bedeutet mehr als 1 char
. Eine Charakter können, benötigen 17 char
.
Meine Frage war, über die Konvertierung char
in eine UTF-16-Codierung Wert. Auch wenn eine gesamte Zeichenfolge von 17 char
stellt nur einen "Charakter", ich will immer noch wissen, wie zu konvertieren jeder UTF-16-Einheit in einen Zahlenwert.
z.B.
String s = "அ";
int i = Unicode(s[0]);
char
(oder MyString[3]
, das ist ein char)Im Grunde war ich auf der Suche für die C# - Entsprechung der SQL Server
Unicode
- Funktion (msdn.microsoft.com/en-us/library/ms180059.aspx)InformationsquelleAutor Ian Boyd | 2011-10-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist im Grunde das gleiche wie Java. Wenn du Sie hast, als
char
, können Sie einfach konvertieren zuint
implizit:Wenn du Sie hast, als Teil eines Strings, nur um dieses einzelne Zeichen zuerst:
Beachten Sie, dass Zeichen, die nicht im basic multilingual plane wird dargestellt als zwei UTF-16 code-Einheiten. Es ist unterstützen .NET für die Suche nach der vollen Unicode-code-point, aber es ist nicht einfach.
Ä
(A
+¨
) vertreten sind als zwei UTF-16 code-Einheiten. Aber der Punkt ist getroffen: schwer Besetzungchar
numerischeAuch verschiedene Zeichen, die kann dargestellt werden die Zusammensetzung, sondern können auch dargestellt werden als einzelnes UTF-16 code-Einheiten. Per definition, wenn es im BMP -, es hat einen code-Punkt weniger als 64 Kb, so dargestellt werden kann, als UTF-16-code-unit 🙂
Sie haben keine Zeiger zur ersatzzeichenpaare Identifikation? TIA.
Haben Sie einen Blick auf
char.ConvertToUtf32(string, int)
,char.IsLowSurrogate
etc.Oops! Sorry: Google, abgesehen davon, dass Ihr Arbeitgeber, ist mein Freund: Char.IsHighSurrogate(ch), Char.IsLowSurrogate(ch), Char.IsSurrogatePair()
InformationsquelleAutor Jon Skeet
Wenn man den Charakter als
char
, können Sie werfen eineint
, die Darstellung der Figur den numerischen Wert. Sie können dann drucken, die in irgendeiner Weise, die Sie mögen, wie mit jedem anderen integer.Wenn Sie wollten, hexadezimal-Ausgabe statt, die Sie verwenden können:
X
ist für hexadezimal,4
ist für zero-padding zu vier Zeichen.InformationsquelleAutor svick
Einen
char
ist nicht unbedingt das ganze Unicode -code zeigen. In UTF-16-codierte Sprachen wie C#, können Sie wirklich brauchen, 2char
s zum darstellen einer einzigen "logischen" Charakter. Und den string-Längen migh nicht, was du erwartest - die MSDN documnetation für String.Length-Eigenschaft sagt:"Die Length-Eigenschaft gibt die Anzahl der Char-Objekten in diesem Beispiel, nicht die Anzahl der Unicode-Zeichen."
char
ist es, die bereits numerisch (im Prinzip ein vorzeichenloser 16-bit integer). Sie Mai wollen cast es, einige der integer-Typen, aber dies ändert nichts an der tatsächlichen bits, die waren ursprünglich in derchar
.Wenn Ihre Unicode-Zeichen ist 2
char
s, müssen Sie multiplizieren einer von 2^16, und fügen Sie es zu den anderen, was in einemuint
numerischen Wert:char c1 = ...;
char c2 = ...;
uint c = ((uint)c1 << 16) | c2;
Wenn Sie sagen, "decimal", das bedeutet in der Regel eine Zeichenfolge, die nur Zeichen, die ein Mensch interpretieren würde als dezimal-stellen.
Wenn Sie darstellen können, die Unicode-Zeichen nur durch ein
char
, können Sie wandeln es in dezimal-string einfach durch:char c = 'அ';
string s = ((ushort)c).ToString();
Wenn Sie 2
chars
für Ihre Unicode-Zeichen konvertiert Sie in einuint
wie oben beschrieben, dann rufen Sieuint.ToString
.--- EDIT ---
AFAIK diakritische Zeichen werden als getrennte "Zeichen" (und eigenen code-Punkte) trotz visuell wiedergegeben zusammen mit der "Basis" - Charakter. Jeder dieser code-Punkte, die alleine genommen noch höchstens 2 UTF-16 code-Einheiten.
BTW ich glaube der richtige name für das, was Sie hier reden ist nicht "character", aber "durch die Kombination von Zeichen". Ja, ein einziges Kombination Charakter kann mehr als 1 code zeigen und deshalb mehr als 2 code units. Wenn Sie möchten, eine dezimale Darstellung wie die Kombination von Zeichen, können Sie wahrscheinlich tun es die meisten einfach durch
BigInteger
:Je nachdem, welche Reihenfolge der Bedeutung der code-Einheit "digits" Sie wollen, möchten Sie vielleicht in umgekehrter
c
.A̖͇͉͉͉᷿̿᷾︡︠ͯ҄͟͟
besteht aus 13 code Punkte (Der lateinische GroßbuchstabeA
zusammen mit einer Reihe von diakritischen Zeichen). (display-Unterstützung hängt vom browser). Aber das, was ich will, und was ich kriegen kann, noch Netz mit(int)MyString[i]
jeder code-point hat einen decimal-Wert, entspricht einemU+xxxx
.Ich glaube, Sie sind verwirrend-code "Punkt" mit dem code "Einheit". Code point stellt eine "logische" Zeichen (die aktuelle Unicode hat 1,114,112) und ist nicht auf ein bestimmtes encoding. Auf der anderen Seite, einem code unit ist spezifisch zu Kodieren. AFAIK, ein code unit in die UTF-16 kann angezeigt werden, entweder allein oder in einem surrogate-pair-Mädchen, schon gar nicht in einem array von 13 code-Einheiten. Sprechen Sie über einige der anderen Codierung als UTF-16?
ich war im Gespräch über einen Charakter aus mehr als zwei Codepunkte (die in UTF-16 mehr als zwei code-Einheiten). z.B. kleine lateinische
r
mitcaron
undcedilla
(U+0072 U+0327 U+030C
) ist ein einzelnes Zeichen. Sie können auch kompliziertere Zeichen, die aus 13 UTF-16 code-Einheiten. Aktualisierte Frage mit Bild von so einem Charakter.Finden Sie die --- EDIT --- in meiner Antwort.
InformationsquelleAutor Branko Dimitrijevic
InformationsquelleAutor Dmitriy