|
系统环境:
前台是一个嵌入式的babylinux环境,字符集是ANSIC1968的,工具都是busybox的,应用程序是MicroWindow Nanox+FLTK,数据库是mysql;
后台是window2000,sqlserver数据库;
因为需要在前台读写后台的数据库,所以选择了freetds的驱动。由于嵌入式空间有限,所以基本是手动静态编译,然后拿tds的静态库,通过调用函数来实现前后台间通讯的。
因为公司的nanox版本支持显示中文,加上编译freetds的时候加上不做字符集转换的参数(网上看的,因为后台默认是cp936,和前台的ANSIC1968不同,所以不转换),结果下载数据一切正常!
但问题来了!因为前后台的字符集不一样,所以到时上传中文不成功!我尝试不设置客户端的字符集(看代码知道不手动设置就会调用默认的,是ISO9***的)。。。
于是改后重试,这次终于上传成功了!!欢喜一阵,但到后台一看,中文乱码一片!!其实乱码很合理,因为比较字符集不一样。
说了一大堆,进正题把。前后台字符集不同,但我下载的时候不转换,结果nanox也能正常显示,没什么问题;但我从mysql中select出来,然后上传到sqlserver后,他照样不转换不就行了,为什么是乱码一片呢??
因为是嵌入式环境,所以我压根没用什么freetds中unixodbc的,是不是用上了,字符集不一样都能转换,不会乱码呢??其实我一直觉得,前后台字符集不一样是问题关键,但在我的嵌入式环境下支持中文字符集,好像有点吃不消啊?
网上看的多是在完整的发行版本上跑freetds,所以对我启发不大;因为我的应用软件在PC上的X11模拟跑,上传下载都很正常的,用的也是那个静态库,没什么unixodbc转换什么的,所以我才觉得是不是要装个字符集,好像我PC上用的gb2312或18030之类。。。 |
|