技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 22799
|
推薦
發(fā)表于 2023-11-1 23:46:11
|
只看該作者
漢字可能要通過(guò)編碼成UTF8才能被你的設(shè)備識(shí)別。有沒(méi)有一種可能,是你的掃碼設(shè)備識(shí)別的問(wèn)題?
比如,我用支付寶掃碼,全部漢字都識(shí)別出來(lái)了;微信不支持展示,但也識(shí)別出來(lái)了,點(diǎn)擊下方的“復(fù)制文字”可以復(fù)制,貼入文本編輯器(例如備忘錄之類)后正常顯示,華為瀏覽器(P20 Pro,鴻蒙系統(tǒng)3.0)掃碼測(cè)試也顯示正確。
目前美團(tuán)、淘寶、餓了么App均不支持漢字(錯(cuò)誤提示或者該頁(yè)無(wú)法顯示),抖音無(wú)提示。顯示亂碼的是夸克瀏覽器。其它B站、微博之類的APP就不一一測(cè)試了。
由此可見,亂碼問(wèn)題并非完全是控件的原因。因此,想要解決這個(gè)問(wèn)題,需要做兩個(gè)事情:
1、將漢字編碼(例如,UTF8)后再生成二維碼。
2、在設(shè)備端對(duì)編碼字符串進(jìn)行解碼。3、個(gè)人覺(jué)得,相對(duì)容易的做法是,先將里面的漢字用Asc函數(shù)編碼為ASCII碼(一般的值小于0),后面需要解碼時(shí),使用Chr轉(zhuǎn)為漢字。
為了把中英文隔開,建議用for循環(huán)將每個(gè)轉(zhuǎn)碼用特殊符號(hào)連起來(lái),后面解碼時(shí)split一下,再連起來(lái)就好了。
以下是參考函數(shù):
- Function Encode_Asc(ByVal strEncode As String) As String
- Dim i As Long
- Dim strR As String
- For i = 1 To Len(strEncode)
- strR = strR & Asc(Mid(strEncode, i, 1)) & "|"
- Next
- Encode_Asc = strR
- End Function
- Function Decode_Asc(ByVal strDecode As String) As String
- Dim i As Long
- Dim strR As String
- Dim strArr
- strArr = Split(strDecode, "|")
-
- For i = 0 To UBound(strArr) - 1
- strR = strR & Chr(CLng(strArr(i)))
- Next
- Decode_Asc = strR
- End Function
- Sub test()
- Debug.Print Encode_Asc("你是Roych")
- '返回-15133|-13625|82|111|121|99|104|
- Debug.Print Decode_Asc("-15133|-13625|82|111|121|99|104|")
- '返回你是Roych
- End Sub
復(fù)制代碼 比如,應(yīng)用場(chǎng)景如下:
假設(shè)二維碼是:-15133|-13625|82|111|121|99|104|,對(duì)應(yīng)的控件是Text0,掃碼后在更新后事件里,讀取Me.Text0的值,然后調(diào)用Decode_Asc解碼,把解碼得到的值作為條件進(jìn)行查詢,或者把解碼后的值添加到表記錄中,這些都可以。
綜上,在設(shè)計(jì)表時(shí),可以考慮2個(gè)字段。一個(gè)是原文字段,另一個(gè)是編碼后用于生成二維碼的字段。
|
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)
x
|