| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 341 人关注过本帖
标题:需要VFP9中显示国际音标如ŋ,但VFP9中读取包含Unicode字符的内容就乱码 ...
取消只看楼主 加入收藏
shschy
Rank: 2
等 级:论坛游民
帖 子:112
专家分:45
注 册:2022-3-13
结帖率:35%
收藏
 问题点数:10 回复次数:10 
需要VFP9中显示国际音标如ŋ,但VFP9中读取包含Unicode字符的内容就乱码
‌需要VFP9中显示国际音标如ŋ,但VFP9中读取包含Unicode字符的内容就乱码
搜索帮助,已改进到使用 Microsoft Form Text2.0控件来显示显示,
但是只能在控件上用键盘ctrl+v黏贴可以实现 国际音标(含Unicode字符的字符串),
一旦经vfp9内部操作,如“Microsoft Form Text2.0控件”.text=_cliptext,就乱码。

同时含unicode字符内容保存到dbf表(如insert into dbf 或 replace 某字段 with 某字符串),
也无法实现unicode字符正常保存与读取。

国际音标(IPA)符号的Unicode字符主要包括元音、辅音及特殊符号,
以下是部分常见字符的编码示例:
[ŋ]‌:后鼻音符号(U+014B) ‌
如‌:唱歌,sing‌,[siŋ]


搜索更多相关主题的帖子: 字符 乱码 内容 VFP9 显示 
昨天 09:53
shschy
Rank: 2
等 级:论坛游民
帖 子:112
专家分:45
注 册:2022-3-13
收藏
得分:0 
请问要用哪种net控件
请问net控件的具体名称,在win10+vfp9.0环境下自带,还是需要下载安装?谢谢!
以下是引用iswith在2025-8-18 10:18:06的发言:

vfp要使用unicode除了使用net控件其它没有任何办法,一艘船只能装10个人,现在你有100人要上船,除换船就是把原来的船再绑一个大船来装。

昨天 11:39
shschy
Rank: 2
等 级:论坛游民
帖 子:112
专家分:45
注 册:2022-3-13
收藏
得分:0 
请问具体要用哪个windows控件
这里只找到microdsoft form textbox2.0控件可以显示,但也只能做到操作系统黏贴才行。
使用microsoft-form-textbox.text=_cliptext就会出现乱码。
只要vfp处理过含unicode字符的信息,如filetostr()等,出来都是乱码?
图片附件: 游客没有浏览图片的权限,请 登录注册

以下是引用吹水佬在2025-8-18 13:46:07的发言:

VFP有unicode字符串的转换处理功能,数据运算和存取应该没问题。
只是输入输出不支持unicode字符,可用windows的控件。

昨天 14:04
shschy
Rank: 2
等 级:论坛游民
帖 子:112
专家分:45
注 册:2022-3-13
收藏
得分:0 
下面是有关内容附件
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

下面是图片内容文件
关于unicode读取窗体.rar (120.23 KB)



昨天 14:22
shschy
Rank: 2
等 级:论坛游民
帖 子:112
专家分:45
注 册:2022-3-13
收藏
得分:0 
**参考 https://bbs.bc-cn.net/viewthread.php?tid=509403&highlight=unicode
** 如:\u6d4b\u8bd5\u6587\u5b57
** 先转换成:4b6dd58b8765575b
** ? STRCONV(STRCONV("4b6dd58b8765575b",16), 6)

&& 如:\u0053\u0049\u01F1
&& 先转换成:53004900F101
thisform.Olecontrol3.text=STRCONV(STRCONV("53004900F101",16), 6)
? STRCONV(STRCONV("53004900F101",16), 6)
图片附件: 游客没有浏览图片的权限,请 登录注册
昨天 14:30
shschy
Rank: 2
等 级:论坛游民
帖 子:112
专家分:45
注 册:2022-3-13
收藏
得分:0 
具体编码结果:
's' → 0x73(1字节)
'i' → 0x69(1字节)
'ŋ' → 0xC5 0x8B(2字节)
完整UTF-8编码序列:73 69 C5 8B(共4字节)

字母分解编码:
"S":U+0053 → UTF-8编码为0x53(单字节ASCII兼容)
"I":U+0049 → UTF-8编码为0x49(单字节ASCII兼容)
"ŋ":U+014B → UTF-8编码为0xC5 0x8B(双字节序列)
完整UTF-8编码序列:53 49 C5 8B(共4字节)

? STRCONV(STRCONV("53004900F101",16), 6)  &&大写  SIŋ
? STRCONV(STRCONV("730069008BC5",16), 6)  &&小写  siŋ
在vfp中都无法显示
昨天 15:04
shschy
Rank: 2
等 级:论坛游民
帖 子:112
专家分:45
注 册:2022-3-13
收藏
得分:0 
如果要将文件unicode.txt中的内容“siŋ”,正常显示在microsoft-form-textbox类控件中
如果要将文件unicode.txt中的内容“siŋ”,正常显示在microsoft-form-textbox类控件中
应该如何实现?
a=filetostr("d:\unicode.txt")
b=STRCONV(a.......)
.
.
.
microsoft-form-textbox.text=b
以下是引用吹水佬在2025-8-18 14:53:24的发言:

转码存取不行吗?试试用二进制字符码。

昨天 15:09
shschy
Rank: 2
等 级:论坛游民
帖 子:112
专家分:45
注 册:2022-3-13
收藏
得分:0 
请教用内存编码再通过内存地址传送,有具体的可执行代码吗?以下是搜到的,但调试不成功。
以下代码执行下来无效果。
    * 读取剪贴板Unicode文本(修复内存复制问题)
    LOCAL hClip, pData, nSize, cBuffer, cUnicode
    cUnicode = ""
   
    DECLARE INTEGER OpenClipboard IN user32 INTEGER hWnd
    DECLARE INTEGER CloseClipboard IN user32
    DECLARE INTEGER GetClipboardData IN user32 INTEGER uFormat
    DECLARE INTEGER GlobalLock IN kernel32 INTEGER hMem
    DECLARE INTEGER GlobalUnlock IN kernel32 INTEGER hMem
    DECLARE INTEGER GlobalSize IN kernel32 INTEGER hMem
    DECLARE INTEGER RtlMoveMemory IN kernel32;
        STRING @lpvDest, INTEGER lpvSource, INTEGER cbCopy
   
    IF OpenClipboard(0) = 0
        MESSAGEBOX("剪贴板被占用,请关闭占用程序后重试", 16)
        RETURN ""
    ENDIF
   
    * 读取CF_UNICODETEXT格式(13)
    hClip = GetClipboardData(13)
    IF hClip > 0
        pData = GlobalLock(hClip)
        IF pData > 0
            nSize = GlobalSize(hClip)
            IF nSize > 0 AND nSize % 2 = 0  && 确保UTF-16格式(偶数字节)
                cBuffer = REPLICATE(CHR(0), nSize)
                RtlMoveMemory(@cBuffer, pData, nSize)  && 稳定复制内存
                cUnicode = STRTRAN(cBuffer, CHR(0)+CHR(0), "", 1, 1)  && 移除结尾空字符
            ENDIF
            GlobalUnlock(hClip)
        ENDIF
    ENDIF
    CloseClipboard()
    &&RETURN cUnicode
    &&cUnicode
   
        * 将UTF-16字符串转为UTF-8(用于文件输出)
    LOCAL nLen, nBufSize, cUTF8, nResult
    nLen = LEN(cUnicode)
    IF nLen = 0
       RETURN ""
    ENDIF
   
    DECLARE INTEGER WideCharToMultiByte IN kernel32;
        INTEGER CodePage, INTEGER dwFlags,;
        STRING cWideCharStr, INTEGER cchWideChar,;
        STRING @cMultiByteStr, INTEGER cchMultiByte,;
        STRING cDefaultChar, INTEGER @lpUsedDefaultChar
   
    * 获取所需缓冲区大小
    nBufSize = WideCharToMultiByte(65001, 0, cUnicode, nLen/2, "", 0, "", 0)
    IF nBufSize = 0
       RETURN ""
    ENDIF
   
    * 转换为UTF-8
    cUTF8 = REPLICATE(CHR(0), nBufSize)
    nResult = WideCharToMultiByte(65001, 0, cUnicode, nLen/2, @cUTF8, nBufSize, "", 0)
   
    thisform.olecontrol4.font.Name = "微软雅黑"
    thisform.olecontrol1.text=nResult
    thisform.olecontrol2.text=nLen
    thisform.olecontrol3.text=nBufSize
    thisform.olecontrol4.text=FILETOSTR("test.txt") &&cUTF8
以下是引用吹水佬在2025-8-18 22:43:38的发言:

不要用vfp字符串来处理输入输出。
可以用内存编码再通过内存地址传送。
或者用转义字符码,如用web控件时html的&#x....,ŋ的码是014b(两字节)。

1 小时前
shschy
Rank: 2
等 级:论坛游民
帖 子:112
专家分:45
注 册:2022-3-13
收藏
得分:0 
请问应该用何种语言描述,去求索得到完全音标的对应关系表信息(比如C58b 对应 ŋ)?
参考以上代码 使用 STRTOFILE(0h0073+0h0069+0hC58B,"oldtmp.txt") 实现“ s iŋ”存入oldtmp.txt
请问应该用何种语言描述,去求索得到完全音标的对应关系表信息(比如C58b  对应 ŋ)?
请问可以通过内存调用,实现将上述oldtmp.txt内容直接经过内存,到microsoft form textbox中显示?
还是只能编个html文件,到浏览器中显示?谢谢!

以下是引用吹水佬在2025-8-18 22:23:37的发言:

保存和读取好像也没问题
STRTOFILE(0hC58B,"tmp.txt")        && 保存后用记事本打开 ŋ
?STRCONV(FILETOSTR("tmp.txt"),15)  && 读取显示编码正常

1 小时前
shschy
Rank: 2
等 级:论坛游民
帖 子:112
专家分:45
注 册:2022-3-13
收藏
得分:0 
上网按照“请按表格方式提供每个国际音标对应的编码”搜到如下信息,
但 为   014B,好像与前次搜到的 “"ŋ":U+014B → UTF-8编码为0xC5 0x8B(双字节序列)”不一致
图片附件: 游客没有浏览图片的权限,请 登录注册



33 分钟前
快速回复:需要VFP9中显示国际音标如ŋ,但VFP9中读取包含Unicode字符的内容 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019437 second(s), 12 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved