希伯来语Unicode转换为整数转换VBA

时间:2014-02-24 08:24:41

标签: vba unicode hebrew

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

בּ

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

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

3 个答案:

答案 0 :(得分:0)

从技术上讲,

ChrW(64305)
= בּ

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

-1231 + 65536 = 64305

完美!

答案 1 :(得分:0)

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

Public Function CorrectHebrew(gibberish As String)As String

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

结束功能

答案 2 :(得分:-1)

  

当我使用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)
相关问题