如何使用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
我需要处理一些 UTF8 字符(有些是中文,有些是日文)的字节长度的情况。据我所知,一个UTF8字符可以占用1个字节到4个字节的空间。
我需要计算一个特定的 UTF8 字符使用的字节数以及一串 UTF8 字符(英文和[中文或日文]的混合)占用的总字节数。
从文章
我曾尝试使用 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