DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: cdk19821
今日帖子: 32
在线用户: 15
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 jhxxm (jhxxm) ▲▲▲▲▲ -
普通会员
2018/11/13 21:38:22
标题:
请教如何让程序支持unicode 浏览:1711
加入我的收藏
楼主: 目前的做的一个程序, 在英文系统下, 必须更改为非unicode程序中所使用的当前语言改为 中文(简体, 中国), 否则正文显示不正常. 
请问如何才能开发出来的程序,能够不改这个地方就能够正常显示. 

是不是将 变量中 ansistring 类型改为 string (我不确定, string是不是支持unicode), 还是要请教请教.
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2018/11/13 23:28:52
1楼: 用高版本的,默认全是unicode。
但是具体要看你的业务逻辑,能不能把ansistring转成unicodestring
----------------------------------------------
--
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/11/14 8:50:10
2楼: 对于网络传输 INDY COM USB 等 全部用 TBytes 代替。 千万不要用 string 。否则你会收到大量的 3F。
调用 API 全部用 PCHAR。使用的 API 接口不带 A 也不带 W。
控件全部用 string。
数据库字段,没变化。还是 WideString WideMemo 才支持 unicode。

前提是你的 IDE 支持 默认 unicode 。建议选这个月或下个月发布的 10.3。或者已经发布的 10.2.3.3231。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 jhxxm (jhxxm) ▲▲▲▲▲ -
普通会员
2018/11/14 10:50:46
3楼: 谢谢上面各位。目前使用的IDE是 XE10.1
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/11/14 13:51:56
4楼: 楼主真厉害,居然用了一个不存在的东西。
可能楼主的 exe 在英文环境下不得不修改 系统设置,就是因为用了不存在的 版本吧。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 jhxxm (jhxxm) ▲▲▲▲▲ -
普通会员
2018/11/14 15:41:50
5楼: 哈哈, 抱歉,Delphi 10.1版本,  可能对XE有怨念.随手写错.
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/11/14 15:51:44
6楼: 那么问题来了我们的10.1 写的 EXE。比如说
lable1.Caption
dfm 上设置为 中文。
显示正常啊。
没有问题。
如果你是写代码的
lable1.Caption := XXXDataSet.FielBbyName('某个Wide字段').AsString; 也是没问题的。
当然也有一些情况,是会有问题的。
lable1.Caption := '中文';
默认的 PAS,编译结果,肯定是中文系统正常,其他文字系统不正常的。
所以,人家 DELPHI 的 PAS 也是支持多编码的。
选择 UTF8 UNICODE 都可以。
还有就是
lable1.Caption := XXXDataSet.FielBbyName('某个Ansi字段').AsString; 也是不正常的。
不过,使用 FireDAC 连大部分数据库,可以指定 编码,比如指定为 GBK 就可以了。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 jhxxm (jhxxm) ▲▲▲▲▲ -
普通会员
2018/11/14 16:30:54
7楼: Delphi 这个还真折腾. 请问 10.2.3 这个版本也是你上面说的这种情况吗?
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/11/14 16:32:07
8楼: 问题是,我自己的程序,不会出现问题。这就足够了。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 jhxxm (jhxxm) ▲▲▲▲▲ -
普通会员
2018/11/14 17:16:00
9楼: 好的, 非常感谢!
----------------------------------------------
-
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2018/11/19 9:30:50
10楼: 1、放弃落伍的“经典版本”— Delphi 7,拥抱 Delphi 2009 + ,有条件最好用最新版 10.2,10.3。
2、数据库字符串字段用 NVARCHAR。
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/11/19 9:36:44
11楼: 10.3 说了,以后默认的 pas 编码为 无 BOM 的 UTF8。
那么也就是说 你们过去的 无 bom 的 pas 会显示中文乱码。
当然,看到乱码可以试试 修改编码,找找 ansi。如果有 ANSI 或者 GB 之类的编码,先选上。然后再转为 UTF8。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 zwjchinazwj (蒲石) ★☆☆☆☆ -
普通会员
2018/11/19 14:37:14
12楼: 注意 utf8 也是unicode 

unicode 是 utf8 utf16 utf32的范称

DelphiXE以上版本默认使用的是utf16,但是,某些函数却并不支持utf16,到今天都是如此。

主要原因在于:utf16中存在着不能用一个16位表达的字符,
因此,使用string[10]来读写字符串中第10个字符这种代码,严格来讲,是错误的。也因此,诸如Pos函数查找某个字符也是有问题的。

尤其是使用 string[10] 来修改第10个字符,就比较危险:
一种思路是,让字符只读,不能改。但是,这个对delphi来讲影响太大。

另一种思路,就是EMB现在的态度,知道这里有问题,不理它,让程序员自己去解决。反正utf16中,用2个16bits表达一个字符的字符比较少。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行39.0625毫秒 RSS