digitalmars.D.learn - std.encoding Usage
- Mandeep Singh Brar <mandeep brars.co.in> Dec 24 2010
- spir <denis.spir gmail.com> Dec 24 2010
- Mandeep Singh Brar <mandeep brars.co.in> Jan 12 2011
Hi,
Can you please help me/point me to the usage for std.encoding
package.I think i was successfully able to encode a string into
byte array using the following code:
string x = "test";
ubyte[] buffer;
EncodingScheme es = EncodingScheme.create("UTF-16LE");
foreach(c;codePoints(x))
{
ubyte[4] buf;
int l = es.encode(c, buf);
buffer~=buf[0..l];
}
and i was able to decode using the following:
string y;
for(int pos=0;pos<buffer.length;pos+=2)
{
ubyte[] cha;
cha = buffer[pos..pos+2];
dchar f1 = es.decode(cha);
y~=cast(char)f1;
}
However i dont think i am doing it the correct way, particularly
the decoding part. (introducing 2 and creating another buffer
etc.).. if i directly try decoding it using the buffer variable in
the decoding example, i do not get a correctly decoded string.
Can you please let me know the correct way to encode and then
decode a string using std.encoding package. I tried reading the doc
page on the site but wasnt able to clearly follow it.
Regards
Mandeep
Dec 24 2010
On Fri, 24 Dec 2010 18:33:04 +0000 (UTC) Mandeep Singh Brar <mandeep brars.co.in> wrote:Hi, =20 Can you please help me/point me to the usage for std.encoding package.I think i was successfully able to encode a string into byte array using the following code: string x =3D "test"; ubyte[] buffer; EncodingScheme es =3D EncodingScheme.create("UTF-16LE"); foreach(c;codePoints(x)) { ubyte[4] buf; int l =3D es.encode(c, buf); buffer~=3Dbuf[0..l]; } =20 and i was able to decode using the following: string y; for(int pos=3D0;pos<buffer.length;pos+=3D2) { ubyte[] cha; cha =3D buffer[pos..pos+2]; dchar f1 =3D es.decode(cha); y~=3Dcast(char)f1; } =20 However i dont think i am doing it the correct way, particularly the decoding part. (introducing 2 and creating another buffer etc.).. if i directly try decoding it using the buffer variable in the decoding example, i do not get a correctly decoded string. =20 Can you please let me know the correct way to encode and then decode a string using std.encoding package. I tried reading the doc page on the site but wasnt able to clearly follow it.
As an alternative, you may directly use std.utf instead (I also had issues = using std.encoding, falled back to std.utf.) Example of encoding/decoding f= rom/yo utf8 at https://bitbucket.org/denispir/denispir-d/src/b543fb352803/T= ext.d. Inside the struct Text, fromUTF8 decodes a whole source text and toS= tring encodes it. Note: a trick for decoding is that index (must be uint) is passed by ref an= d advanced by called funcs. Denis -- -- -- -- -- -- -- vit esse estrany =E2=98=A3 spir.wikidot.com
Dec 24 2010
Putting here that the following worked for me.
string str
ubyte[] buffer;
foreach(ch;str) {
ubyte[4] buf;
int len = encodingScheme.encode(ch, buf);
buffer~=buf[0..len];
}
ubyte[] encodedBuffer;
string decodedString;
while(encodedBuffer.length>0) {
decodedString~=cast(char)encodingScheme.safeDecode(encodedBuffer);
}
Thanks
Mandeep
Jan 12 2011








Mandeep Singh Brar <mandeep brars.co.in>