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

How to calculate byte length of one UTF8 character using Excel VBA?

我需要处理一些 UTF8 字符(有些是中文,有些是日文)的字节长度的情况。据我所知,一个UTF8字符可以占用1个字节到4个字节的空间。

我需要计算一个特定的 UTF8 字符使用的字节数以及一串 UTF8 字符(英文和[中文或日文]的混合)占用的总字节数。

从文章 看来,每个 UTF8 字符都有一个固定的 Unicode 值,而 unicode 值又可以帮助确定字节长度。

我曾尝试使用 ascw() 函数来获取值(不确定返回值是否为 unicode 值),但某些 UTF8 字符返回负值并导致在确定使用的字节长度时出错.

如果我以下面的UTF8字符串为例,当我使用ascw()函数时,

台湾台中市西区民龙里21邻模范街

asc("西") 返回 -30337。实际上这个字用了3个字节。

asc("龙") 返回 -24691。实际上这个字用了3个字节。

asc("里") 返回 -28212。实际上这个字用了3个字节。

asc("邻") 返回 -28368。实际上这个字用了3个字节。

asc("街道") 返回 -30633。实际上这个字用了3个字节。

导致我无法使用上面link提供的逻辑来正确判断上面5个UTF8字符的字节长度

工作于: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