foxpro 中文字问题
时间:2014-05-17
来源:互联网
我有一个字串,里面有数目字和中文字元。例如例1aa= 'cd国a一b123国'例2aa= 'aa国国国国一123'例3aa= 'c国dab一123国'
而我想将以上字串分成两行,於第五或第六个字开始转行,但以上字串中的第五个字开始,可能会有英文或中文,请问点先可以认到个个位系中文字既开首??
我试过用isleadbyte(substr,5,2)),例1可以认到个个唔系中文字但例2因为第五个字元系「国」字既左字,用isleadbyte佢都系传回T,所以如果我照於第五个字转行,转行会出现乱码。
请问有咩办法可以辨定所选字系咪一个完整既中文字??
作者: hkhome 发布时间: 2014-05-17
isalpha(substr(1aa,5,1)).or.isdigit(substr(1aa,5,1)) 检查英文字和数字

[ 本帖最后由 me888 於 2014-4-22 03:50 PM 编辑 ]
作者: me888 发布时间: 2014-05-17
我试过isalpha("国"),佢回传都系ture...
作者: hkhome 发布时间: 2014-05-17
[ 本帖最后由 me888 於 2014-4-22 06:28 PM 使用 编辑 ]
作者: me888 发布时间: 2014-05-17
如果个程式没有预设处理中文字的library
可以查编码的
例如UTF-8
ASCII字元会用一个char(1-byte)来保存
0zzzzzzz <---第一个bit必定为0....而后7个bit用来表示ASCII字元
非ASCII字元就会使用上二至四个char
第一个char的可以指示出之后连续有几多个char都属於这个非ASCII字元
即
110yyyyy 10zzzzzz <---第一个char以110开头...表示这个字元会使用上两个char
1110xxxx 10yyyyyy 10zzzzzz <---第一个char以1110开头...表示这个字元会使用上三个char
11110www 10xxxxxx 10yyyyyy 10zzzzzz <---第一个char以11110开头...表示这个字元会使用上四个char
作者: Susan﹏汪汪 发布时间: 2014-05-17
以前也遇过同样问题,依赖foxpro build in function 未必能解决,解决方法正如 me888 和 susan 所言。但首先要确定用什么编码,没有记错的话,foxpro 好像预设是 big5。但我很外久没接触 foxpro 了,你还是自行确认一下。
作者: assembly.jc 发布时间: 2014-05-17
唔可能由中间睇, 认到一粒中文字而唔会中间意外切成半粒中文字.
作者: 111x111=12321 发布时间: 2014-05-17
而 '穈' = chr(234)+chr(176)
当中间有字串 ...ABAB..
你系唔能够确实佢来自 ABABABAB (ABAB是正字) 或 BABABABA (ABAB是乱码).
Is it ...国国国国国... or ...穈穈穈穈穈...
难为国穈定分界.

作者: 111x111=12321 发布时间: 2014-05-17
E.g. '国' = chr(176)+chr(234)
而 '穈' = chr(234)+chr(176)
当中间有字串 ...ABAB..
你系唔能够确实佢来自 ABABABAB (ABAB是正字) 或 BABABABA (ABAB是乱码).
Is it ...国国国国国... or ...穈穈穈穈穈. ...
以UTF-8为例
有两种format去表示字元
第一种系用单一码表示:000wwwxx xxxxyyyy yyzzzzzz
这格式下所有字元都一样会占据3 bytes
第二种系编码成byte array方式
#5已经解释左、针对不同字元会使用不定长度的值
会使用到不同的标签
作者: Susan﹏汪汪 发布时间: 2014-05-17
分到
以UTF-8为例
有两种format去表示字元
第一种系用单一码表示:000wwwxx xxxxyyyy yyzzzzzz
这格式下所有字元都一样会占据3 bytes
第二种系编码成byte array方式
#5已经解释左、针对不同字元会使用不定长度的 ...

我例子已列出, 是big5,
你应该先同意 :「系呀, big5分唔到..... 第二d内码先有机会分到, 例如...」
作者: 111x111=12321 发布时间: 2014-05-17
大家好,小弟有个问题想请教高手。
我有一个字串,里面有数目字和中文字元。例如例1aa= 'cd国a一b123国'例2aa= 'aa国国国国一123'例3aa= 'c国dab一123国'
而我想将以上字串分成两行,於第五或第六个字开始转行,但 ...
不过实际要如何 check ,就不知道了。
或者会有 library 。
约略看过 http://zh.wikipedia.org/wiki/%E5%A4%A7%E4%BA%94%E7%A2%BC 后,我觉得似乎“无得搞”。
作者: xianrenb 发布时间: 2014-05-17
首先多谢各位师兄的回答。
aa = '国国'
我试过asc(aa,2,1)佢都系大过127,似乎未能确定个个字系byte one定byte tow。
我个串字元有三百几字,当中夹杂好多不规则既数目同中文,而要每164至170至转行。
真系头都大埋...
作者: hkhome 发布时间: 2014-05-17
确实有机会可以解决问题。
我试试先,容后报告。
谢谢
作者: hkhome 发布时间: 2014-05-17
刚在别的论坛有位朋友建议用substrc。
确实有机会可以解决问题。
我试试先,容后报告。
谢谢
楼上已分析,要由第一个字起parse, 高阶语言太慢。
作者: Pseudo 发布时间: 2014-05-17
aa = '国12345国'
? substr(aa,1,2) = 国
? substrc(aa,1,2) = 国1
作者: hkhome 发布时间: 2014-05-17
可以睇到分辨方法, 应该检查 string 里 char 129 .. 254 ASCII
begin
(* 字元对应表 ($81 .. $FE) *)
Result:=(c in [Char($81)..Char($FE)]);
{
Result:=IsDBCSLeadByte(Byte(c));
}
end;
作者: me888 发布时间: 2014-05-17
已试过,substrc系可以有限度咁做到。
aa = '国12345国'
? substr(aa,1,2) = 国
? substrc(aa,1,2) = 国1
substrc (或任何 xxxc()之类中文字串function) 功能上是'醒目'地数对中文字粒、数对中英acsii文组合字粗.
我相信佢内部已由byte one开始慢慢数.
确是「有限度」解决问题.
因为数对字粒, 代表与filesize(based on no. of ascii)之类数法有差异, 切开field width, display size, file size 时未必如愿.
作者: 111x111=12321 发布时间: 2014-05-17
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28