gman.zipengine Unicode
BlitzMax Forums/BlitzMax Programming/gman.zipengine Unicode
| ||
I'm trying to zip a bank stream with gman's zipengine but I can't figure out how to store unicode characters. It works fine if you store a utf-8 text file from disk, but with streams the characters appear to get converted to ANSI.Framework brl.Basic Import gman.zipengine ' Create our zipwriter object Local zwObject:ZipWriter = New ZipWriter Local bank:TBank = CreateBank() Local bankfile:TBankStream = CreateBankStream(bank) WriteLine(bankfile, "ЯабвгдежзийклмнопрстуȻȼȽɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟɠɡɢ") If (zwObject.OpenZip("data.zip", False)) 'zwObject.AddFile("TestData.txt") zwObject.AddStream(bankfile, "BankTestData.txt") zwObject.CloseZip() End If Like I say, if I put the same text into a utf-8 text file (TestData.txt) and uncomment the AddFile line the file is stored perfectly. Any idea what's going wrong? Edit: The forum can't handle unicode either. I need extended characters like these: http://www.utf8-chartable.de/unicode-utf8-table.pl?start=384 Last edited 2011 |
| ||
I read somewhere that streams and Unicode are a no-go - regardless of whether you're using ZipEngine or not. Because of that I'm currently using LoadString/SaveString for stuff that contains Unicode. |
| ||
Hmm, well I seem to have found a work around after adapting some old code of neilos http://www.blitzbasic.com/Community/posts.php?topic=57686. I purely need this for my games save files so I create them with a custom TBankStream and load with a custom TStream. The beauty of this is that I can add a password to the zip and stop casual cheats editing their save file and uploading to the leaderboards. :) ' Saving Local bank:TBank = CreateBank() Local bankstream:TMyBankStream = TMyBankStream.Create(bank) ' WRITE DATA TO STREAM ' Create zip version Local zipw:ZipWriter = New ZipWriter If (zipw.OpenZip("Save/"+filename, False)) zipw.AddStream(bankstream, "savefile") EndIf CloseStream(file) zipw.CloseZip() ' Loading Local file:TMyStream = New TMyStream file.SetStream(ReadStream("zipe::Save/"+filename+"::savefile")) ' READ DATA FROM STREAM Type TMyBankStream Extends TBankStream Function Create:TMyBankStream( bank:TBank ) Local stream:TMyBankStream=New TMyBankStream stream._bank=bank Return stream End Function Method WriteString(str:String) WriteInt(str.Length) If str.Length = 0 Then Return Local shorts:Short Ptr = str.ToWString() WriteBytes(shorts, str.Length*2) MemFree(shorts) End Method End Type Type TMyStream Extends TStreamWrapper Method ReadString:String() Local ln% = ReadInt() If ln = 0 Then Return "" Local shorts:Short[ln] ReadBytes( shorts, ln*2 ) Return String.FromShorts( shorts, ln ) End Method End Type Last edited 2011 |