|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
jhxxm (jhxxm) |
▲▲▲▲▲ |
-
|
普通会员 |
|
2018/11/13 21:38:22 |
标题: |
|
加入我的收藏 |
楼主: |
目前的做的一个程序, 在英文系统下, 必须更改为非unicode程序中所使用的当前语言改为 中文(简体, 中国), 否则正文显示不正常. 请问如何才能开发出来的程序,能够不改这个地方就能够正常显示.
是不是将 变量中 ansistring 类型改为 string (我不确定, string是不是支持unicode), 还是要请教请教.
----------------------------------------------
- |
作者: |
|
2018/11/13 23:28:52 |
1楼: |
用高版本的,默认全是unicode。 但是具体要看你的业务逻辑,能不能把ansistring转成unicodestring
----------------------------------------------
--
|
作者: |
|
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
----------------------------------------------
-
|
作者: |
|
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有怨念.随手写错.
----------------------------------------------
-
|
作者: |
|
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 这个版本也是你上面说的这种情况吗?
----------------------------------------------
-
|
作者: |
|
2018/11/14 16:32:07 |
8楼: |
问题是,我自己的程序,不会出现问题。这就足够了。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
jhxxm (jhxxm) |
▲▲▲▲▲ |
-
|
普通会员 |
|
2018/11/14 17:16:00 |
9楼: |
好的, 非常感谢!
----------------------------------------------
-
|
作者: |
|
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
|
作者: |
|
2018/11/19 9:36:44 |
11楼: |
10.3 说了,以后默认的 pas 编码为 无 BOM 的 UTF8。 那么也就是说 你们过去的 无 bom 的 pas 会显示中文乱码。 当然,看到乱码可以试试 修改编码,找找 ansi。如果有 ANSI 或者 GB 之类的编码,先选上。然后再转为 UTF8。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
|
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表达一个字符的字符比较少。
----------------------------------------------
-
|
|