Laden...

Liste "aller" UniCode-Chars und der UnicodeCategory

Erstellt von juetho vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.430 Views
J
juetho Themenstarter:in
3.331 Beiträge seit 2006
vor 16 Jahren
Liste "aller" UniCode-Chars und der UnicodeCategory

Hallo,

ich habe für mich eine Übersicht erstellt, welches Unicode-Zeichen zu welcher Kategorie gehört. Muster:

Let = Letter
Dig = Digit
Sym = Symbol
Pun = Punctuation
Sep = Separator
WSp = WhiteSpace
Sur = Surrogate
Ctl = Control

 	 Num	 Hex	Let	Dig	Sym	Pun	Sep	WSp	Sur	Ctl
--	----	----	---	---	---	---	---	---	---	---
 	0032	0020	  	  	  	  	 x	 x	  	  
!	0033	0021	  	  	  	 x	  	  	  	  
"	0034	0022	  	  	  	 x	  	  	  	  
#	0035	0023	  	  	  	 x	  	  	  	  
$	0036	0024	  	  	 x	  	  	  	  	  
%	0037	0025	  	  	  	 x	  	  	  	  
0	0048	0030	  	 x	  	  	  	  	  	  
1	0049	0031	  	 x	  	  	  	  	  	  
2	0050	0032	  	 x	  	  	  	  	  	  
:	0058	003A	  	  	  	 x	  	  	  	  
;	0059	003B	  	  	  	 x	  	  	  	  
<	0060	003C	  	  	 x	  	  	  	  	  
=	0061	003D	  	  	 x	  	  	  	  	  
>	0062	003E	  	  	 x	  	  	  	  	  
?	0063	003F	  	  	  	 x	  	  	  	  
@	0064	0040	  	  	  	 x	  	  	  	  
A	0065	0041	 x	  	  	  	  	  	  	  
B	0066	0042	 x	  	  	  	  	  	  	  

Ich könnte mir vorstellen, dass eine solche Liste von allgemeinem Interesse ist (auch international). Sollte ich sie bei CodeProject veröffentlichen, oder habt Ihr andere Vorschläge? Ich kann sie auch auf meiner eigenen Homepage zur Verfügung stellen.

Die gesamte Textdatei ist 2.873.038 Bytes groß, als Zip-Datei 464.574 Bytes. Ich habe sie jetzt aufgeteilt:*Anhang in diesem Post: CharTypes1.Txt von 0x0020 bis 0x7FFF mit 1.461.504 Bytes und Quelltext *Anhang in meinem nächsten Post: CharTypes2.Txt von 0x8000 bis 0xFFFF mit 1.411.666 Bytes

Auslöser für diese Liste war übrigens die Unklarheit, was Unicode unter Symbol und was unter Punctuation versteht; das ist mir jetzt erst recht nicht klar.
Jürgen

//Edit: Liste von 0x7FFE auf 0xFFFF verlängert.

//Edit: Download hinzugefügt, Erläuterung angepasst

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo juetho,

eine Frage danach wurde zwar meines Wissens noch nicht gestellt und daher schätze ich den Bedarf als eher gering, aber da die Zip-Datei klein genug ist, kannst du sie einfach an deinen Beitrag als Dateianhang anhängen. Dann sieht man auch gleich wie oft die Datei heruntergeladen wird.

Vielleicht kannst du auch den Quelltext des Programms posten, mit dem du die Liste erstellt hast.

herbivore

J
juetho Themenstarter:in
3.331 Beiträge seit 2006
vor 16 Jahren

Original von herbivore
eine Frage danach wurde zwar meines Wissens noch nicht gestellt und daher schätze ich den Bedarf als eher gering,

Sehe ich eigentlich auch so, aber wenn ich die Tabelle schon habe, ist es nützlich, wenn sie nur einem anderen hilft.

aber da die Zip-Datei klein genug ist, kannst du sie einfach an deinen Beitrag als Dateianhang anhängen.

OK, wird im ersten Beitrag und hier angefügt.

Vielleicht kannst du auch den Quelltext des Programms posten, mit dem du die Liste erstellt hast.

Bitte schön (der vollständige Quelltext ist im Download enthalten; Befehle, die nur zur Verschönerung dienen, habe ich hier gestrichen):

public static void Main(string[] args)
{
	bool Letter, Digit, Symbol, Punctuation, Separator, WhiteSpace,
		Surrogate, Control;
	int i0;
	for (char c0 = ' '; c0 <= Char.MaxValue; ) {
		//  normale Werte prüfen
		i0 = (int)c0;
		Letter = Char.IsLetter(c0);
		Digit = Char.IsDigit(c0);
		Symbol = Char.IsSymbol(c0);
		Punctuation = Char.IsPunctuation(c0);
		Separator = Char.IsSeparator(c0);
		WhiteSpace = Char.IsWhiteSpace(c0);
		Surrogate = Char.IsSurrogate(c0);
		Control = Char.IsControl(c0);
		//  einzelne Zeile übertragen
		if (Letter || Digit || Symbol || Punctuation || Separator
		    || WhiteSpace || Surrogate || Control)
			charTypes.Add( String.Format(
				"{0}\t{1:D4}\t{2:X4}\t {3}\t {4}\t {5}\t {6}\t {7}\t {8}\t {9}\t {10}",
				Control ? ' ' : c0, i0, i0,
				Letter ? 'x' : ' ', 
				Digit ? 'x' : ' ', 
				Symbol ? 'x' : ' ', 
				Punctuation ? 'x' : ' ', 
				Separator ? 'x' : ' ', 
				WhiteSpace ? 'x' : ' ',
				Surrogate ? 'x' : ' ', 
				Control ? 'x' : ' ') );
		else
			//  ungewöhnliche Sonderfälle im Klartext anzeigen
			charTypes.Add( String.Format(
				"{0}\t{1:D4}\t{2:X4}\t {3}",
				Control ? ' ' : c0, i0, i0,
				Char.GetUnicodeCategory(c0).ToString() ));
		if (c0 == Char.MaxValue) 
			break;
	}
	//  Abschluss: charTypes in string[] umkopieren, dann speichern
	string[] charListe = new string[charTypes.Count];
	for(int x0 = 0; x0 < charTypes.Count; x0++) {
		charListe[x0] = charTypes[x0];
	}
	System.IO.File.WriteAllLines("CharTypes.Txt", charListe, System.Text.Encoding.UTF8);
}

Gruß Jürgen

//Edit: Teil 2 der Liste angehängt