如何让易语言支持Unicode
主要是用于枚举文件部分文件名中的Unicode字符会变成一个?如图所示
【扩展界面支持库一Ex】3.9.4082024-04-08更新
https://bbs.125.la/forum.php?mod=viewthread&tid=14729664
(出处: 精易论坛)
核心库你是别想用U了,要么直接换C++ 红尘旧梦i 发表于 2024-4-8 22:10
【扩展界面支持库一Ex】3.9.4082024-04-08更新
https://bbs.125.la/forum.php?mod=viewthread&tid=14729 ...
关键就是这个东西我下载不了 > 用于枚举文件
使用对应的 Unicode API
- (https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findfirstfilew)
- (https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findnextfilew)
- (https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findclose)
如果你需要渲染到界面(如编辑框),你需要获取对应的控件句柄并调用对应的方法通知更改,例如 [`SetWindowTextW`](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowtextw)、(https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessagew)。
这个问题是易语言的局限性导致的,语言设计之初就没有考虑过 Unicode 支援。 用W类型api自己写,当然这就一点也不易了
功能复杂的话不建议写下去,易语言核心库是完全不支持unicode的 爱飞的猫 发表于 2024-4-8 23:45
> 用于枚举文件
使用对应的 Unicode API
是不是这样
.版本 2
.子程序 文件_枚举W, 整数型, 公开, 枚举某个目录下的指定类型文件,成功返回文件数组。
.参数 欲寻找的目录, 字节集
.参数 欲寻找的文件名, 字节集, , *为寻找全部文件
.参数 文件数组, 字节集, 参考 可空 数组
.参数 是否带路径, 逻辑型, 可空, 为真时返回文件为绝对路径
.参数 是否遍历子目录, 逻辑型, 可空, 为真时文件数组不主动清空
.局部变量 szPath, 字节集
.局部变量 FileName, 字节集
.局部变量 hFind, 整数型
.局部变量 FindFileData, WIN32_FIND_DATAW
.局部变量 cFileName, 字节集
.局部变量 bRes, 逻辑型
szPath = 删除Unicode结尾空白字节 (欲寻找的目录)
.如果真 (取字节集右边 (szPath, 2) ≠ { 92, 0 })
szPath = szPath + { 92, 0 }
.如果真结束
FileName = 删除Unicode结尾空白字节 (欲寻找的文件名)
.如果真 (是否遍历子目录 = 假)
清除数组 (文件数组)
.如果真结束
hFind = FindFirstFileW (szPath + FileName + { 0, 0 }, FindFileData)
.如果真 (hFind = -1)
返回 (0)
.如果真结束
.循环判断首 ()
cFileName = 到字节集 (FindFileData.cFileName)
cFileName = 删除Unicode结尾空白字节 (cFileName)
.如果真 (wcscmp (cFileName + { 0, 0 }, { 46, 0, 0, 0 }) ≠ 0 且 wcscmp (cFileName + { 0, 0 }, { 46, 0, 46, 0, 0, 0 }) ≠ 0)
.如果真 (是否遍历子目录 且 位与 (FindFileData.dwFileAttributes, 16) ≠ 0)
文件_枚举W (szPath + cFileName + { 92, 0 }, 欲寻找的文件名, 文件数组, 是否带路径, 是否遍历子目录)
.如果真结束
.如果真 (位与 (FindFileData.dwFileAttributes, 32) ≠ 0)
.如果 (是否带路径)
加入成员 (文件数组, szPath + cFileName + { 0, 0 })
.否则
加入成员 (文件数组, cFileName + { 0, 0 })
.如果结束
.如果真结束
.如果真结束
bRes = FindNextFileW (hFind, FindFileData)
.循环判断尾 (bRes)
FindClose (hFind)
返回 (取数组成员数 (文件数组))
使用高级表格来显示吧,也不影响软件效果,高级表格是支持Unicode的。
页:
[1]