Was ist der unterschied zwischen ascii und unicode? Oft las ich in der Hilfe. Ich erfuhr das ascii ein byte groß ist
und ein unicode zwei bytes für mehr verfügbare zeichenauswahl. wenn diese info falsch ist bitte mich berichtigen. danke
aber wenn ich ein unicode string habe und möchte nach ascii wie mache ich das?
wie kann ich n String von ascii nach unicode und wieder zurück konvertieren?
ascii und unicode
ascii und unicode
Ich benutze Pure Basic 5.30 auf Microsoft Windows 7.
Gruß
JM
Gruß
JM
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: ascii und unicode
Wenn du in den Compiler-Optionen z.B. Unicode aktiviert hast, dann sind automatisch alle Strings in deinem Programm Unicode. Du kannst dann also nicht die normalen Stringfunktionen nutzen um Ascii-Strings zu manipulieren.
Aber Purebasic hilft dir an vielen Stellen damit mit beiden zurecht zu kommen. Zum Beispiel kannst du aus einer Ascii-Datei lesen, indem du bei 'ReadString()' das Flag '#PB_Ascii' setzt. Damit wird der String im Ascii-Modus aus der Datei gelesen, liegt aber nach der Zuweisung in eine String-Variable als Unicode-String vor. Das selbe geht natürlich auch umgekehrt und mit 'WriteString()'.
Möchtest du jetzt manuell einen Unicode-String in seine Ascii-Version konvertieren, helfen dir dabei 'PeekS()' und 'PokeS()'.
Aber Purebasic hilft dir an vielen Stellen damit mit beiden zurecht zu kommen. Zum Beispiel kannst du aus einer Ascii-Datei lesen, indem du bei 'ReadString()' das Flag '#PB_Ascii' setzt. Damit wird der String im Ascii-Modus aus der Datei gelesen, liegt aber nach der Zuweisung in eine String-Variable als Unicode-String vor. Das selbe geht natürlich auch umgekehrt und mit 'WriteString()'.
Möchtest du jetzt manuell einen Unicode-String in seine Ascii-Version konvertieren, helfen dir dabei 'PeekS()' und 'PokeS()'.
Code: Alles auswählen
Procedure hexDump(*buffer.Ascii, length.i)
Protected dump.s = Hex(*buffer, #PB_Integer) + " "
Protected i.i = 0
While i < length
dump + RSet(Hex(*buffer\a, #PB_Ascii), 2, "0") + " "
i + 1
If i % 8 = 0
dump + #LF$ + Hex(*buffer, #PB_Integer) + " "
EndIf
*buffer + 1
Wend
Debug dump
EndProcedure
Define s.s = "Dies ist ein Test-String!"
Debug #DQUOTE$ + s + #DQUOTE$
Define.i length = Len(s)
Debug "Er besteht aus " + length + " Zeichen."
Define.i size = (MemoryStringLength(@s) + 1) * SizeOf(Character)
Debug "Er verbraucht " + size + " Bytes im Speicher."
Debug "Das ist sein Hexdump:"
hexDump(@s, size)
CompilerIf #PB_Compiler_Unicode
Define *buffer = AllocateMemory((length + 1) * SizeOf(Ascii))
PokeS(*buffer, s, -1, #PB_Ascii)
Debug "Konvertiert in Ascii sieht er so aus:"
hexDump(*buffer, (length + 1) * SizeOf(Ascii))
CompilerElse
Define *buffer = AllocateMemory((length + 1) * SizeOf(Unicode))
PokeS(*buffer, s, -1, #PB_Unicode)
Debug "Konvertiert in Unicode sieht er so aus:"
hexDump(*buffer, (length + 1) * SizeOf(Unicode))
CompilerEndIf
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: ascii und unicode
Da der Compiler Schalter für ASCII bald rausfliegt, solltest Du bei neuem Code nur noch Unicode verwenden.
ASCII kann man dann zur Not noch im Speicher halten, bzw. mit Pseudotypes andere Libs verwenden.
Desweiteren sollte die IDE bei Dateiformat immer auf UTF-8 stehen.
Gruß
Thomas
ASCII kann man dann zur Not noch im Speicher halten, bzw. mit Pseudotypes andere Libs verwenden.
Desweiteren sollte die IDE bei Dateiformat immer auf UTF-8 stehen.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
