在microsoft中的字符串的UTF 8字节长度excel

时间:2016-02-12 04:00:37

标签: excel validation unicode utf-8

我正在尝试将字符串长度的单元格数据验证添加到8到16之间,最大字节长度小于40(UTF8编码)。

我使用excel活动支持创建了数据验证:
数据验证(数据选项卡 - >数据验证(在excel 2016 mac中删除重复和合并之间)),在设置选项卡中,有验证

criteria:
Validation Criteria:
Allow: Text Length
Data : between
Min : 8 & Max : 16

虽然上述验证符合我的所有限制(8

对于其他语言(比如日语),虽然通过物理长度计算字符串长度(例如:"こんにちはこんにちはこんにちは",日语为hellohellohello),但UTF8字节值为45字节,即违反了40个字节,以为长度只有15个。

我在excel中找到了“LENB”函数,但它的值为30(而不是45)。我认为它基于不同的编码(ansi may)

我找到了UNICODE函数,它给出了上述情况下第一个字符(12371)的unicode编号。但我不明白如何从这个数字中获取字节值(3个字节是第一个字符(こ)的值)。

非常感谢在这方面的任何帮助。

2 个答案:

答案 0 :(得分:0)

使用Unicode值,您可以计算特定字节将占用的字节数。 < 128是1字节,否则< 2048是2,否则< 65536是3,否则4。

答案 1 :(得分:0)

我遇到了同样的问题,这是基于以上答案和this文章的无VBA的解决方案。假设您在A1中有一个字符串:

=SUM(
    IF(UNICODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<128, 1,
    IF(UNICODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<2048, 2,
    IF(UNICODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<65536, 3, 4
))))

离开单元格时不要忘记使用数组函数(CTRL + SHIFT + ENTER)