精易论坛

标题: 乱码?? 不支持字符,unicode编码支持,emoji表情转\uxxxx [打印本页]

作者: wlp    时间: 2024-5-7 13:54
标题: 乱码?? 不支持字符,unicode编码支持,emoji表情转\uxxxx
本帖最后由 wlp 于 2024-5-8 08:15 编辑
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
调试输出 (_UTF8文本_编码 (“哈哈 \u0001\u0002”))
调试输出 (_UTF8文本_解码 (_UTF8文本_编码 (“哈哈 \u0001\u0002”)))
子程序名返回值类型公开备 注
_UTF8文本_解码文本型 
参数名类 型参考可空数组备 注
UTF8文本字节集
符号文本型默认:\u
变量名类 型静态数组备 注
u字节集 
n整数型 
k整数型 
transform逻辑型 
unicode_result字节集 
s文本型 
temp字节集 
' https://www.chinesecj.com/unihan.php
如果真 (是否为空 (符号))
符号 = “\u”
unicode_result = {  }
u = 编码_Utf8到Unicode (UTF8文本)
如果真 (取字节集右边 (u, 2){ 0, 0 })
u = 取字节集左边 (u, 取字节集长度 (u) - 2)

变量循环首 (1, 取字节集长度 (u), 2, n)
k = u [n]左移 (u [n + 1], 8)
transform = 真
' -----acsii范围
' [\0-\x1F\x7F-\x9F]
如果真 (k ≤ 159 取反 (k ≥ 0 k ≤ 31 k ≥ 127 k ≤ 159))
transform = 假

' -----汉字范围
如果真 (k ≥ 13312 k ≤ 19893 k ≥ 19968 k ≤ 40869 k ≥ 63744 k ≤ 64045)  ' [\u3400-\u4DB5] ' [\u4E00-\u9FA5]  ' [\uF900-\uFA2D]
transform = 假

判断 (transform = )
unicode_result = unicode_result + 取字节集中间 (u, n, 2)

s = 符号
s = s + __Byte_To_Hex (u [n + 1])
s = s + __Byte_To_Hex (u [n])
temp = 编码_Utf8到Unicode (到字节集 (到小写 (s)))
如果真 (取字节集右边 (temp, 2){ 0, 0 })
temp = 取字节集左边 (temp, 取字节集长度 (temp) - 2)
unicode_result = unicode_result + temp

变量循环尾 ()
返回 (编码_Unicode到Ansi (unicode_result))
子程序名返回值类型公开备 注
_UTF8文本_编码字节集 
参数名类 型参考可空数组备 注
文本文本型
符号文本型默认:\u
变量名类 型静态数组备 注
u字节集 
n整数型 
k整数型 
transform逻辑型 
s字节集 
temp字节集 
v整数型 
j整数型 
seq文本型 
new字节集 
utf8字节集 
' https://www.chinesecj.com/unihan.php
如果真 (是否为空 (符号))
符号 = “\u”
u = 编码_Ansi到Unicode (文本)
如果真 (取字节集右边 (u, 2){ 0, 0 })
u = 取字节集左边 (u, 取字节集长度 (u) - 2)
s = 编码_Ansi到Unicode (符号)
如果真 (取字节集右边 (s, 2){ 0, 0 })
s = 取字节集左边 (s, 取字节集长度 (s) - 2)
n = 0
判断循环首 ()
n = 寻找字节集 (u, s, n)
如果真 (n = -1)
跳出循环 ()
k = n + 取字节集长度 (s)
transform = 假
seq = “”
变量循环首 (k, k + 8 - 1, 2, j)
v = u [j]左移 (u [j + 1], 8)
如果真 (取反 (v ≥ 97 v ≤ 102 v ≥ 65 v ≤ 70 v ≥ 48 v ≤ 57))  ' [a-f] [A-F] [0-9]
跳出循环 ()
transform = 真
seq = seq + 字符 (v)
变量循环尾 ()
如果真 (取文本长度 (seq) ≠ 4)
transform = 假

判断 (transform)
new = 到字节集 (__Byte_From_Hex (取文本右边 (seq, 2)))到字节集 (__Byte_From_Hex (取文本左边 (seq, 2)))
u = 字节集替换 (u, n, 取字节集长度 (s) + 8, new)
n = 0

n = k

判断循环尾 ()
utf8 = 编码_Unicode到Utf8 (u)
如果真 (取字节集右边 (utf8, 1){ 0 })
utf8 = 取字节集左边 (utf8, 取字节集长度 (utf8) - 1)
返回 (utf8)
子程序名返回值类型公开备 注
__Byte_To_Hex文本型 
参数名类 型参考可空数组备 注
Byte字节型
变量名类 型静态数组备 注
hi整数型 
lo整数型 
s文本型 
s = “0123456789abcdef”
hi = Byte ÷ 16 + 1
lo = Byte % 16 + 1
返回 (取文本中间 (s, hi, 1)取文本中间 (s, lo, 1))
子程序名返回值类型公开备 注
__Byte_From_Hex字节型 
参数名类 型参考可空数组备 注
ByteHex文本型
变量名类 型静态数组备 注
hi整数型 
lo整数型 
s文本型 
s = “0123456789abcdef”
hi = 寻找文本 (s, 取文本左边 (到小写 (ByteHex), 1), , ) - 1
lo = 寻找文本 (s, 取文本右边 (到小写 (ByteHex), 1), , ) - 1
返回 (左移 (hi, 4) + lo)


i支持库列表   支持库注释   
spec特殊功能支持库


注意:返回的是字节集数据是utf-8, 不是unicode

\uaabb 对应 Unicode字节集 {bb, aa}

下面这个代码用于转换不支持的字符,或者用 `https://www.jyshare.com/front-end/3602/`里面的`中文转Unicode`

```javascript

[zxsq-anti-bbcode-i]function ToUnicode(text) {


[zxsq-anti-bbcode-i]    var arr = []


[zxsq-anti-bbcode-i]    for(var i=0; i

[zxsq-anti-bbcode-i]        var c = text.charCodeAt(i);

[zxsq-anti-bbcode-i]        var lo = (c & 255).toString(16).padStart(2,'0');

[zxsq-anti-bbcode-i]        var hi = (c >> 8).toString(16).padStart(2,'0');

[zxsq-anti-bbcode-i]        arr.push("\u" + hi + lo);

[zxsq-anti-bbcode-i]    }

[zxsq-anti-bbcode-i]    return arr.join('');

[zxsq-anti-bbcode-i]}


[zxsq-anti-bbcode-i]console.log(ToUnicode('요요哈哈'));

[zxsq-anti-bbcode-i]```










作者: fire9    时间: 2024-5-7 14:05
学习了。        
作者: 唐山小哥    时间: 2024-5-7 15:57
好东西  感谢
作者: 唐山小哥    时间: 2024-5-7 16:08
k = u [i] + 左移 (u [i + 1], 8)     这里什么意思? 运行不起来啊  K是整数    u是字节集  u[i] 这是什么
作者: hxnr    时间: 2024-5-7 16:42
为啥这个代码可以跑起来
k = u [i] + 左移 (u [i + 1], 8)     这里什么意思? 运行不起来啊  K是整数    u是字节集  u[i] 这是什么
作者: wlp    时间: 2024-5-8 08:12
hxnr 发表于 2024-5-7 16:42
为啥这个代码可以跑起来
k = u  + 左移 (u , 8)     这里什么意思? 运行不起来啊  K是整数    u是字节 ...

现在可以了,直接改好的
作者: 515667395    时间: 2024-5-8 18:18
多谢分享
作者: onda    时间: 2024-5-8 21:01
好东西,支持
作者: wlp    时间: 2024-5-10 21:15
本帖最后由 wlp 于 2024-5-10 21:32 编辑
hxnr 发表于 2024-5-7 16:42
为啥这个代码可以跑起来
k = u  + 左移 (u , 8)     这里什么意思? 运行不起来啊  K是整数    u是字节 ...

取字节集数据(取字节集中间(u,i, 2), #短整数型)  的意思
作者: hxnr    时间: 2024-5-10 22:50
wlp 发表于 2024-5-8 08:12
现在可以了,直接改好的

u 不是数组么
作者: 515667395    时间: 2024-6-18 13:33
多谢分享
作者: 笨来无一悟    时间: 2024-6-29 18:33
功德无量
作者: jingyigg    时间: 2024-7-27 13:24
楼主,请问可以通过你这个实现显示VX里的emoji符号吗,比如❀电车跟油车
作者: wanliyingxiap    时间: 2024-8-15 10:33
有问题, 【:】都转换不出来
作者: wlp    时间: 2024-8-15 11:32
wanliyingxiap 发表于 2024-8-15 10:33
有问题, 【:】都转换不出来

把utf-8转ansii无法显示的字符转成\uxxxx,本来就不是显示emoji之类的特色符号的
作者: wanliyingxiap    时间: 2024-8-16 12:27
wlp 发表于 2024-8-15 11:32
把utf-8转ansii无法显示的字符转成%uxxxx,本来就不是显示emoji之类的特色符号的 ...

感觉易语言本身可以显示的应该直接显示出来。




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4