[Mono-dev] PtrToStringAnsi

Joshua Tauberer tauberer at for.net
Wed Mar 8 14:30:33 EST 2006


While debugging a SqliteClient issue, I came across an interesting bug.
 The following returns null when I'm pretty sure it should not (it
doesn't on Windows):

Marshal.PtrToStringAnsi(Marshal.StringToCoTaskMemAnsi("ü"))

In case the encoding of this email gets messed up, that's a u with
umlauts, (char)0xFC.

The encoding half "works" (Marshal.ReadByte reports the bytes (0xFC
0x00)), on the assumption that I'm supposed to get ANSI out of this
method.  Internally, g_utf16_to_utf8 is used, which means that (besides
being surprised this call doesn't actually do ANSI encoding) I would
actually expect a multibyte representation of that character.  That's
from a few minutes of Googling for info on UTF-8.

So I'm confused.  Can someone with more knowledge about encodings tell
me whether this really doesn't make sense?

I'm using the latest RPMs.  Here's a test program:

using System;
using System.Runtime.InteropServices;

public class Test {
    public static void Main() 		
Console.WriteLine(Marshal.PtrToStringAnsi(Marshal.StringToCoTaskMemAnsi("ü")));
	}
}

-- 
- Joshua Tauberer

http://taubz.for.net

"Unfortunately, we're having this discussion. It's too bad,
because guess who listens to the discussion: the enemy."



More information about the Mono-devel-list mailing list