[C++] C++ Builder 中 Ansi 编码的字符串在Android/iOS程序中显示的问题
呃,这个问题说起来,其实也不麻烦,C++ Builder 本身在 TEncoding 做了处理,但是,可能用起来还是不够舒服,毕竟 Delphi 的 TBytes 在 C++ Builder 里用,还是感觉怪怪的。
不过,可以告诉大家一个好消息,AnsiString 在 Delphi 中虽然不可用,但是,在 C++ 中可以用。
接下来,告诉大家一个坏消息,你指望 AnsiString 直接赋值给一个 UnicodeString ,然后显示出来的梦在跨平台的情况下是不成立的。
不过,你要注意一下,C++ Builder 中 AnsiString 实际上是 typedef AnsiStringT<0> AnsiString; 时,你是不是感觉找到了啥指路明灯?
问题就出在这个AnsiStringT<0> 上,0 在 Windows 下对应的是CP_ACP,是操作系统的默认代码页,而 Android 和 iOS 上默认的代码页并不是 936,所以中文显示会出问题。
继续,是不是能找到思路了,我们这样写就OK了:
AnsiStringT<936> S=”这是Ansi编码的字符串”;
然后你会发现,美好的中文又回来了。
好了,用 TEncoding 的话,C++ 的写法更麻烦一些,还是这么写简单一点点~~~~
http://blog.qdac.cc/?p=3400
-----------------------------------------------------------------------------------------
另外还有高手Hack以后,Delphi里能用的AnsiString:
http://andy.jgknet.de/blog/downloads/
时间: 2024-10-05 15:09:25