excel - 如何使用 Excel VBA 计算一个 UTF8 字符的字节长度?
问题描述
我需要处理一些 UTF8 字符(一些是中文,一些是日文)的字节长度的情况。据我所知,一个 UTF8 字符可以占用 1 字节到 4 字节的空间。
我需要计算一个特定 UTF8 字符使用的字节数,以及计算一串 UTF8 字符(英文和[中文或日文]的混合)占用的总字节数。
从文章UTF 8 byte length of a string in microsoft excel中,似乎每个 UTF8 字符都有一个固定的 Unicode 值,而 unicode 值又可以帮助确定字节长度。
我尝试使用 ascw() 函数来获取值(不太确定返回的值是否为 unicode 值),但某些 UTF8 字符返回负值并导致确定使用的字节长度时出错。
如果我以下面的 UTF8 字符串为例,当我使用 ascw() 函数时,
台湾台中市西区民龙里21邻模范街
asc("西") 返回 -30337。实际上这个词使用了 3 个字节。
asc("龙") 返回 -24691。实际上这个词使用 3 个字节。
asc("里") 返回 -28212。实际上这个词使用了 3 个字节。
asc("邻") 返回 -28368。实际上这个词使用了 3 个字节。
asc("街") 返回 -30633。实际上这个词使用 3 个字节。
结果,我无法使用上述链接提供的逻辑来正确确定上述 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
推荐阅读
- c# - 如何在 C# 中将大字符串转换为整数?
- java - 交互 LinkedList 时的 Null 检查抛出 NullPointerException
- c# - 如何在警报对话框构建器 setSingleChoiceItems 中更新值和选定索引
- scala - 解包元组列表以检查每个元组中的中间值不超过一定数量
- javascript - 未捕获的类型错误:无法读取未定义的属性“替换”
- ios - TableView 标题中的边框在深色模式下更改颜色
- python - 如何生成数字序列的随机列表?
- html - 如何在css的导航栏顶部制作iframe?
- javascript - findOneAndUpdate (mongoose) 返回 true 以更新模型中的嵌套文档,但没有更新
- ms-access-2016 - 使用重新查询或刷新事件访问 2016