我正在尝试使用VBA将以下希伯来语Unicode转换为整数等值:
בּ
从技术上讲,这个作品是由ב和ּ(一个字母和一个元音)组成的
使用AscW(),如果单独使用,我会收到1488的字母和1468的元音。但是,如果它们在בּ中组合在一起,我怎样才能得到它的等价值?我想得到1488和1468.当我使用AscW()时,我得到-1231,这不是很好。
答案 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)