希伯来文Unicode到整数转换VBA

希伯来文Unicode到整数转换VBA,vba,unicode,hebrew,Vba,Unicode,Hebrew,我正在尝试使用VBA将以下希伯来语Unicode转换为其整数等价形式: בּ 从技术上讲,这篇作文是由ב和ּ(一个字母和一个元音)组成的 使用AscW(),如果我分别使用它们,则字母为1488,元音为1468。然而,如果它们像בּ那样组合在一起,我怎么才能得到它的等价值呢?我想要1488和1468。当我使用AscW()时,得到的是-1231,这不好 当我使用AscW()时,得到的是-1231,这不好 有点对。AscW函数的一个已知怪癖是,它返回的UTF-16代码单元被误解为有符号的16位数字。如

我正在尝试使用VBA将以下希伯来语Unicode转换为其整数等价形式:

בּ

从技术上讲,这篇作文是由ב和ּ(一个字母和一个元音)组成的

使用AscW(),如果我分别使用它们,则字母为1488,元音为1468。然而,如果它们像בּ那样组合在一起,我怎么才能得到它的等价值呢?我想要1488和1468。当我使用AscW()时,得到的是-1231,这不好

当我使用AscW()时,得到的是-1231,这不好

有点对。
AscW
函数的一个已知怪癖是,它返回的UTF-16代码单元被误解为有符号的16位数字。如果您添加
&H10000
将其恢复为正数,您将获得
&HFB31
,这是与Dagesh组合的“בּ”又名U+FB31希伯来字母下注的预期结果

我想要1488和1468

要从组合形式(U+FB31)到分解形式(U+05D1,U+05BC),您需要使用Unicode规范化算法。不幸的是,VBA不支持Unicode规范化。如果您可以访问VB.NET,在那里很容易:

some_string.Normalize(NormalizationForm.FormD)
技术上

ChrW(64305)
= בּ

Cell A1 = "בּ"
AscW(Range("A1").value) 
= -1231

-1231 + 65536 = 64305

太好了

使用ADODB Stream中的以下函数,然后对其执行char操作。我认为应该可以:(您需要参考最新的Microsoft ActiveX数据对象库)

公共函数将希伯来语(胡言乱语作为字符串)更正为字符串

Dim inStream As ADODB.stream

Set inStream = New ADODB.stream
inStream.Open
inStream.Charset = "WIndows-1255"
inStream.WriteText gibberish
inStream.Position = 0
inStream.Charset = "UTF-8"
CorrectHebrew = inStream.ReadText
inStream.Close

结束函数

不知道为什么,但我得到了一个1489的AscW()对不起,你是对的。alef=1488,bet=1489,…)谢谢你的更正。我想问题是关于VBAYeeeees的,我知道这一点。”不幸的是,VBA不支持Unicode规范化…“因此你的答案并不能真正回答这个问题,这就是为什么我投了反对票。。。对不起,谢谢你的回复。我将阅读@mehow发送给我的主题,并尝试他的代码。谢谢你们,@mehow:你们的答案也一样,因为在纯VBA中没有一种实现方法(除了编写自己的规范化算法实现)。您的代码只不过是前面说过的“add&H10000”。