【发布时间】:2021-10-16 20:23:11
【问题描述】:
我有一个 VBA 公式函数来拆分字符串并在每个字符之间添加空格。它仅适用于 Ascii 字符串。但我想为泰米尔语做同样的事情。由于它是 Unicode,因此结果不可读。它甚至拆分了在泰米尔语/印地语/加拿大语/马拉雅拉姆语/全印度语言中不应分开的辅助字符、上点、前缀、后缀辅助字符。那么,如何编写一个函数将泰米尔语单词拆分为可读字符。
Function AddSpace(Str As String) As String
Dim i As Long
For i = 1 To Len(Str)
AddSpace = AddSpace & Mid(Str, i, 1) & " "
Next i
AddSpace = Trim(AddSpace)
End Function
添加空间不是这个问题的重点。将 Unicode 字符串从这些语言中的任何一种拆分为一个数组是必需的。
例如,单词“பார்த்து”应分隔为“பா ர் த் து”,而不是“ப ா ர ் த ் த ு”。如您所见,前两个字母“பா”(ப + ா)组合在一起。如果我尝试在它们之间手动放置一个空格,我无法在任何文字处理器中这样做。如果要测试,请将其放在记事本中,并在每个字符之间添加空格。它不允许您分开为(“ப ா”)。所以“பார்த்து”应该分开为“பா ர் த் து”。在类似泰米尔语的语言中,这是正确的分隔。这是我在 VBA 中努力实现的目标。
泰米尔语的字符代码表是here。 泰米尔语/印地语/许多印度语言有(1)辅音,(2)独立元音,(3)从属元音符号,(4)两部分从属元音符号。在这 4 种类型中,前两种是一个单独的字母,它们没有问题。但最后2个是依赖的,它们不应该与其联合特征分开。例如字母 பா (ப + ் ),它包含一个独立 (ப) 和一个从属 (ா) 字母。
如果这些信息还不够,请评论我应该发布更多内容。
(注意:在 C#.Net 中可以使用 @Codo 的 MS link 中的代码)
【问题讨论】:
-
请edit 分享您的问题minimal reproducible example。你怎么调用
AddSpace函数;特别是,它提供的论点来自哪里? Afaik,VBA 在内部使用 UCS-2? -
@ScottCraner 我已经浏览了链接,现在再次将单词分成字节,而不是泰米尔语或类似语言中的字符串中的可读字符。
-
@JosefZ 我想,我已经给出了可重现的例子。我将泰米尔语单词放在 Excel 单元格 A1 中,并输入我提供的公式 =AddSpace("A1"),它适用于 Anscii,不适用于泰米尔语。我无法编写将泰米尔语单词分成可读字母的函数,我不知道。
-
泰米尔语有将“字符”组合成“图形符号”的复杂规则,Unicode 选择的表示也无济于事。为了实现您的目标,您将需要知道如何将 Unicode 代码点组合成字素簇的代码。这将在 .NET (docs.microsoft.com/en-us/dotnet/api/…) 中可用,但必须在 VBA 中从头开始实现。