vfp的“substr”函数输入汉字为什么输出乱码

img

软件用的是Microsoft Visual Fox Pro 6.0,

substr()函数是按字节宽度截取字符串的,在截取中文字符串时,因为一个汉字由两个字节组成,所以如果只截取一个字符就会输出乱码。

用substr()函数对中文字符串进行截取会出现乱码的问题,你可以在substr()函数的基础上封装一个自定义函数,在你进行截取之前,判断你的字符表达式是中文字符串还是英文字符串,如果是中文字符串则每次截取两个字节,如果是英文字符串则每次截取一个字节,这样就不会出现乱码的问题了,但在不同情况下中文字符定义的字节宽度不同,你像中文字符在 GB2312 编码时是2个字节,utf-8 编码时就是3个字节,都不一样的。

举个例子哈:
?substr('hhh嘻h',4,1)
遇到汉字要2位都取,不能只替换一半,你想,本来是一个完整的汉字,你偏要给人家分开,肯定乱码啊,而且截取出来的字你大多都不认识。你把你的起始位置6改为7就对了,截取出来的就是"江南职业学校"了。

这是穿越了么,这个老古董你是不是win7下面玩?估计得装个win98来跑这个才行