希伯来语 Unicode 到整数的转换 VBA



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

בּ

从技术上讲,这种组合物由ב和ּ(字母和元音)组成

使用 AscW(),如果我单独做,我会得到 1488 的字母和 1468 的元音。但是,如果它们像 בּ 一样组合在一起,我如何获得它的等价值?我想得到 1488 和 1468。当我使用 AscW() 时,我得到 -1231,这不好。

从技术上讲,

ChrW(64305)
= בּ
Cell A1 = "בּ"
AscW(Range("A1").value) 
= -1231
-1231 + 65536 = 64305

完善!

使用 ADODB 流中的以下函数,然后对其执行字符。我认为这应该有效:(您需要参考最新的 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

结束功能

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

这有点对。这是AscW函数的一个已知怪癖,它返回被误解为有符号 16 位数字的 UTF-16 代码单元。如果你加上&H10000使其恢复正数,你会得到&HFB31,这就是你对组合的"בּ"又名U + FB31希伯来字母与Dagesh的投注所期望的。

我想得到 1488 和 1468

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

some_string.Normalize(NormalizationForm.FormD)

最新更新