Kyrillisch
-
gefunden 04 ist EOF
so nun lese ich Zeichen für Zeichen und komm zum "Ka" und dort hört er auf weil er denkt das die Datei zuende ist.
Wie kann ich das umgehen ohne das das richtige Dateiende übersehen wird?
-
Wer überprüft bitte auch auf Dateiende anhand eines ASCII-Zeichens??? Egal, jedenfalls ist 0x04 nicht das gleiche wie 0x041A!!!
Naja, Kyrillisch wird ja wohl kein ASCII sein??? Sondern wohl in den Unicode gehören?
Versuch mal mit widecharactern die Datei zu lesen. Also mit std::wifstream und std::wstring arbeiten.
-
Ich arbeite schon mit wchar_t funktioniert auch wunderbar bis zu diesem buchstaben.
So sieht die lese Funktion aus:
bool CUnicodeFile::GetLine(wchar_t line[255]) { if(Source == NULL) return false; wchar_t sign[2]; int i = 0; while(!feof(Source)) { fread(sign,sizeof(wchar_t),1,Source); if(sign[0] == 65279) continue; if(sign[0] == 13) { fread(sign,sizeof(wchar_t),1,Source); if(sign[0] == 10) break; } wcsncpy(line+i,sign,1); i++; } wcscpy(line+i,L"\0"); if(feof(Source)) return false; return true; }Und ich nehme an wenn der Dateizeiger auf die 04 zeigt das er dann das als EOF interpretiert.
-
Artchi schrieb:
Also mit std::wifstream und std::wstring arbeiten.
-
Dir ist schon bewusst, das du C programmierst und nicht C++? Wie mein unbekannter Vorposter schon sagte, hast du anscheinend mein Posting nicht richtig gelesen und entsprechend nicht befolgt.
-
Hallo
versuch mal die Datei Binär zu öffnen.
-
std::wstring unterstützt keine Zeichensätze mit variabler Länge eines Zeichens. Da musst du auf eine andere Stringklasse zurückgreifen. Ich weiß nicht, welche Kodierung deine Datei benützt, aber man muss bei solchen Zeichensätzen (UTF-8/16) aufpassen.
geloeschtKleines Zitat am Rande:
Joel Spolsky schrieb:
It does not make sense to have a string without knowing what encoding it uses.
-
Wollt das ganze mal mit wifstream probieren da ist nur ein Problem: das Program muß unter Win CE laufen und ich Programmiere mit MS Embedded VC++ 4
und da kann ich die nötigen include-files nicht finden.Gibt es den keine Lesefunktion die das Dateiende ignoriert und einfach weiter liest?
@geloescht: Die Datei ist im Unicode Format
-
k funzt wenn Datei binär geöffnet wird.
-
Unicode sagt nichts über den Zeichensatz aus. Unicode ist das Projekt, jedem Buchstaben (und anderen Zeichen) eine eindeutige Nummer zu geben. Wie das in der Datei gespeichert wird, ist ein anderes Kapitel. Zeichensätze, die auf Unicode aufbauen sind:
UTF-8 (ASCII-kompatibel, ein Codepoint kann zwischen 1 und 4 Byte haben), UTF-16 (2 oder 4 Byte pro Zeichen), UTF-32 (4 Byte pro Codepoint), UCS-2 (jedes Codepoint braucht 2 Byte, aber nich alle Unicode-Codepoints sind abgedeckt), UCS-4 (ähnelt UTF-32), UTF-7 und das veraltete UTF-1. Zudem muss man noch Byteorder beachten. Diese Zeichensätze, sind Verfahren, eine Bitfolge einer Unicode-Nummer ("Codepoint") zuzuordnen.
Ziemlich kompliziertes Kapitel. wstring ist unter Windows meines Wissens UCS-2. Das kann zwar den größeren Teil der Unicode-Zeichen darstellen, aber nicht alle. Der Windows-Editor hat die Zeichensatzeinstellung "Unicode", streng genommen, gibt es diesen Zeichensatz nicht. Was sich dahinter verbirgt müsste man mal austesten (ich vermute UCS-4). Im Internet ist UTF-8 wohl am verbreitesten. Spart auch am meisten Speicher, aber das Verarbeiten ist recht prozessorhungrig (aber was ist das schon gegen ein 3D-Spiel?).
geloeschtunicode.org schrieb:
Unicode provides a unique number for every character,
no matter what the platform,
no matter what the program,
no matter what the language.EDIT: "Zeichen" durch politisch korrektes Wort "Codepoint" ersetzt.
Man kann nie wissen...
Interessanter Link: http://www.joelonsoftware.com/articles/Unicode.html
Unicode.org ist etwas verwirrend, finde ich.
-
thx für die info
-
thx für die info