[C++] C++ Builder 中 Ansi 编码的字符串在Android/iOS程序中显示的问题

呃,这个问题说起来,其实也不麻烦,C++ Builder 本身在 TEncoding 做了处理,但是,可能用起来还是不够舒服,毕竟 Delphi 的 TBytes 在 C++ Builder 里用,还是感觉怪怪的。

不过,可以告诉大家一个好消息,AnsiString 在 Delphi 中虽然不可用,但是,在 C++ 中可以用。只用 Delphi 的朋友是否有一种羡慕、嫉妒、恨的感觉,实在想用,Andy 提供了一个修改系统 dcu 的方法,不过不太建议,毕竟不是官方支持。

接下来,告诉大家一个坏消息,你指望 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++ 的写法更麻烦一些,还是这么写简单一点点~~~~

分享到: