如何使用Excel VBA计算一个UTF8字符的字节长度?



我需要满足处理一些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

最新更新