我需要满足处理一些UTF8字符(一些是中文,一些是日语)的字节长度的情况。据我所知,一个UTF8字符可以占用从1个字节到4个字节的空间。
我需要计算一个特定UTF8字符所使用的字节数,以及一串UTF8字符(英语和[中文或日语]的混合)所占用的总字节数。
从文章UTF8字节长度的字符串在microsoft excel中,似乎每个UTF8字符有一个固定的Unicode值,Unicode值可以反过来帮助确定字节长度。
我尝试使用ascw()函数来获取值(不确定返回的值是否为unicode值),但是一些UTF8字符以负值返回,并导致在确定所使用的字节长度时出错。
如果我以以下UTF8字符串为例,当我使用ascw()函数时,
>
> >asc("中文")返回-30337。实际上这个词用了3个字节。
asc(" ")返回-24691。实际上这个词用了3个字节。
asc(" px ")返回-28212。实际上这个词用了3个字节。
asc(" ")返回-28368。实际上这个词用了3个字节。
asc(" desktop ")返回-30633。实际上这个词用了3个字节。
因此,我不能使用上述链接提供的逻辑来正确确定上述5个UTF8字符的字节长度。
from: https://www.vbforums.com/showthread.php?797751-RESOLVED-AscW-returns-negative-value
Dim s, i, ch, c As Range
Set c = Range("A1") 'pasted your text here
s = c.Value
For i = 1 To Len(s)
ch = Mid(s, i, 1)
c.Offset(i, 0).Value = ch
c.Offset(i, 1).Value = Asc(ch)
c.Offset(i, 2).Value = AscW(ch)
c.Offset(i, 3).Value = (AscW(ch) And &HFFFF&)
Next i
输出:
台 63 21488 21488
灣 63 28771 28771
台 63 21488 21488
中 63 20013 20013
市 63 24066 24066
西 63 -30337 35199
區 63 21312 21312
民 63 27665 27665
龍 63 -24691 40845
里 63 -28212 37324
2 50 50 50
1 49 49 49
鄰 63 -28368 37168
模 63 27169 27169
範 63 31684 31684
街 63 -30633 34903