设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 864|回复: 17
打印 上一主题 下一主题

[ActiveX] Access生成带汉字的二维码问题

[复制链接]
1#
发表于 2023-11-1 23:46:11 | 显示全部楼层
汉字可能要通过编码成UTF8才能被你的设备识别。有没有一种可能,是你的扫码设备识别的问题?

比如,我用支付宝扫码,全部汉字都识别出来了;微信不支持展示,但也识别出来了,点击下方的“复制文字”可以复制,贴入文本编辑器(例如备忘录之类)后正常显示,华为浏览器(P20 Pro,鸿蒙系统3.0)扫码测试也显示正确。
目前美团、淘宝、饿了么App均不支持汉字(错误提示或者该页无法显示),抖音无提示。显示乱码的是夸克浏览器。其它B站、微博之类的APP就不一一测试了。
由此可见,乱码问题并非完全是控件的原因。因此,想要解决这个问题,需要做两个事情:
1、将汉字编码(例如,UTF8)后再生成二维码。
2、在设备端对编码字符串进行解码。3、个人觉得,相对容易的做法是,先将里面的汉字用Asc函数编码为ASCII码(一般的值小于0),后面需要解码时,使用Chr转为汉字。
为了把中英文隔开,建议用for循环将每个转码用特殊符号连起来,后面解码时split一下,再连起来就好了。
以下是参考函数:
  1. Function Encode_Asc(ByVal strEncode As String) As String
  2.     Dim i As Long
  3.     Dim strR As String
  4.     For i = 1 To Len(strEncode)
  5.         strR = strR & Asc(Mid(strEncode, i, 1)) & "|"
  6.     Next
  7.     Encode_Asc = strR
  8. End Function


  9. Function Decode_Asc(ByVal strDecode As String) As String
  10.     Dim i As Long
  11.     Dim strR As String
  12.     Dim strArr
  13.     strArr = Split(strDecode, "|")
  14.    
  15.     For i = 0 To UBound(strArr) - 1
  16.         strR = strR & Chr(CLng(strArr(i)))
  17.     Next
  18.     Decode_Asc = strR
  19. End Function

  20. Sub test()
  21.     Debug.Print Encode_Asc("你是Roych")
  22.     '返回-15133|-13625|82|111|121|99|104|
  23.     Debug.Print Decode_Asc("-15133|-13625|82|111|121|99|104|")
  24.     '返回你是Roych
  25. End Sub
复制代码
比如,应用场景如下:
假设二维码是:-15133|-13625|82|111|121|99|104|,对应的控件是Text0,扫码后在更新后事件里,读取Me.Text0的值,然后调用Decode_Asc解码,把解码得到的值作为条件进行查询,或者把解码后的值添加到表记录中,这些都可以。
综上,在设计表时,可以考虑2个字段。一个是原文字段,另一个是编码后用于生成二维码的字段。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 1 反对 0

使用道具 举报

2#
发表于 2023-11-1 23:50:16 | 显示全部楼层
灰太郎 发表于 2023-11-1 19:53
总报错:您没有使用该Activex控件许可,己注册了,不知什么原因

可能因为你用的是win 10家庭版,这个似乎无解。目前我的win 11家庭版倒是没问题。
3#
发表于 2023-11-4 01:52:30 | 显示全部楼层
daviee 发表于 2023-11-3 11:46
看来是扫描终端的兼容问题,支付宝能够扫出来,微信不行,谢谢roych指点!

按草料二维码网站的说法,

因微信规则调整,含中文的静态码使用微信扫描后
。全网的二维码生成器都是这样。


但不代表无法识别
你点击下方的按钮,然后打开文本编辑器,例如短信、备忘录之类,看看能不能粘贴上去?反正我测试是没问题的。
顺带回答一下,另一个无解的问题:
这个是微软技术社区代理斑竹的回复,希望对你有所帮助(放弃治疗
如果是扫描枪识别录入信息,其实可以按我前面说的来做。二维码用ASCII码,识别后再通过窗体事件转为中文存入数据库。

以前我们公司是这么干的:
1、开单后打印包含条码的订单。
2、操作(例如,录入订单完成结果)时打开订单软件。
3、点击按钮进入录入信息界面,激活录入订单号的文本框。
4、通过扫描枪将条码录入到系统。
按这个流程,你只需要修改第1步和补充第5步。
1、将包含汉字的二维码转为ASCII码。
4、将扫码得到的ASCII码转为汉字。
5、将汉字录入系统。
扫码过程,本质上属于录入信息自动化。因此,你只需要在文本框里的更新后事件里进行转码即可。
也就是说,以前你录入的是汉字,现在你录入的ASCII码,后台帮你把这个ACII码转为汉字再录入。有啥问题么?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-12 13:22 , Processed in 0.108214 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表