hdxzd12 发表于 2024-4-8 21:55

如何让易语言支持Unicode

主要是用于枚举文件
部分文件名中的Unicode字符会变成一个?如图所示

红尘旧梦i 发表于 2024-4-8 22:10

【扩展界面支持库一Ex】3.9.4082024-04-08更新
https://bbs.125.la/forum.php?mod=viewthread&tid=14729664
(出处: 精易论坛)
核心库你是别想用U了,要么直接换C++

hdxzd12 发表于 2024-4-8 22:14

红尘旧梦i 发表于 2024-4-8 22:10
【扩展界面支持库一Ex】3.9.4082024-04-08更新
https://bbs.125.la/forum.php?mod=viewthread&tid=14729 ...

关键就是这个东西我下载不了

爱飞的猫 发表于 2024-4-8 23:45

> 用于枚举文件

使用对应的 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 支援。

你好,再见 发表于 2024-4-9 00:41

用W类型api自己写,当然这就一点也不易了
功能复杂的话不建议写下去,易语言核心库是完全不支持unicode的

hdxzd12 发表于 2024-4-9 06:39

爱飞的猫 发表于 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)
返回 (取数组成员数 (文件数组))

鹏路翱翔 发表于 2024-4-9 08:26

使用高级表格来显示吧,也不影响软件效果,高级表格是支持Unicode的。
页: [1]
查看完整版本: 如何让易语言支持Unicode