C# TextElement枚举器类错误或(泰米尔语)Unicode错误
为什么TextElementEnumerator没有正确解析泰米尔Unicode字符C# TextElement枚举器类错误或(泰米尔语)Unicode错误,c#,unicode,.net-2.0,tamil,C#,Unicode,.net 2.0,Tamil,为什么TextElementEnumerator没有正确解析泰米尔Unicode字符 using System; using System.Collections.Generic; using System.Globalization; namespace Glyphtest { internal class Program { private static void Main() { const string unico
using System;
using System.Collections.Generic;
using System.Globalization;
namespace Glyphtest
{
internal class Program
{
private static void Main()
{
const string unicodetxt1 = "ஊரவர் கெளவை";
List<string> output = Syllabify(unicodetxt1);
Console.WriteLine(output.Count);
const string unicodetxt2 = "கௌவை";
output = Syllabify(unicodetxt2);
Console.WriteLine(output.Count);
}
public static List<string> Syllabify(string unicodetext)
{
if (string.IsNullOrEmpty(unicodetext)) return null;
TextElementEnumerator enumerator = StringInfo.GetTextElementEnumerator(unicodetext);
var data = new List<string>();
while (enumerator.MoveNext())
data.Add(enumerator.Current.ToString());
return data;
}
}
}
使用系统;
使用System.Collections.Generic;
利用制度全球化;
名称空间字形测试
{
内部课程计划
{
私有静态void Main()
{
常量字符串unicodetxt1=”ஊரவர் கெளவை";
列表输出=音节化(unicodetxt1);
Console.WriteLine(output.Count);
常量字符串unicodetxt2=”கௌவை";
输出=音节化(unicodetxt2);
Console.WriteLine(output.Count);
}
公共静态列表提纲(字符串Unicodext)
{
if(string.IsNullOrEmpty(unicodetext))返回null;
TextElementEnumerator enumerator=StringInfo.GetTextElementEnumerator(unicodetext);
var data=新列表();
while(枚举数.MoveNext())
data.Add(enumerator.Current.ToString());
返回数据;
}
}
}
下面的代码示例处理Unicode字符
"கௌ'-> 0x0bc8(க) +0xbcc(ௌ). (正确格式)
"கௌ'->0x0bc8(க) +0xbc6(ெ) + 0xbb3(ள) (格式正确)
这是课堂上的虫子吗,
为什么不从字符串中正确地枚举它呢
i、 e
கெளவை => 'கெள'+ 'வை' 必须以正确的形式列举
கெளவை => 'கெ' +'ள' +'வை' 不得以不正确的形式列举
如果是,如何克服此问题。U+0BB3ᴛᴀᴍɪʟ ʟᴇᴛᴛᴇʀ ʟʟᴀ 具有Grapheme_Cluster_Break=XX(其他)。这使Grapheme群集成为正确的群集,因为在Grapheme_Cluster_Break等于其他的字符之前始终存在一个Grapheme群集Break 由于U+0BCC具有grapheme_cluster_Break=SpacingMark,并且这些字符之前通常没有中断(例外情况是在文本开头或前面有控制字符时) 至少Unicode标准是这么说的() 现在,我不知道泰米尔语是如何运作的,所以请用一小撮盐来理解下面的内容 U+0BCC分解为,这意味着这两个序列(and)在规范上不等价,因此不需要对石墨烯簇进行分割以产生相同的结果 当我用泰米尔无知的眼睛看着它时,它似乎是U+0BCCᴛᴀᴍɪʟ ᴀᴜ ʟᴇɴɢᴛʜ ᴍᴀʀᴋ 和U+0BB3ᴛᴀᴍɪʟ ʟᴇᴛᴛᴇʀ ʟʟᴀ 看起来完全一样。但是,U+0BCC是一个间距标记,而U+0BB3不是。如果在输入中使用U+0BCC而不是U+0BB3,结果就是您所期望的
恕我直言,我会说你使用了错误的字符,但我一点也不了解泰米尔语,所以我不能确定。U+0BB3ᴛᴀᴍɪʟ ʟᴇᴛᴛᴇʀ ʟʟᴀ 具有Grapheme_Cluster_Break=XX(其他)。这使Grapheme群集成为正确的群集,因为在Grapheme_Cluster_Break等于其他的字符之前始终存在一个Grapheme群集Break 由于U+0BCC具有grapheme_cluster_Break=SpacingMark,并且这些字符之前通常没有中断(例外情况是在文本开头或前面有控制字符时) 至少Unicode标准是这么说的() 现在,我不知道泰米尔语是如何运作的,所以请用一小撮盐来理解下面的内容 U+0BCC分解为,这意味着这两个序列(and)在规范上不等价,因此不需要对石墨烯簇进行分割以产生相同的结果 当我用泰米尔无知的眼睛看着它时,它似乎是U+0BCCᴛᴀᴍɪʟ ᴀᴜ ʟᴇɴɢᴛʜ ᴍᴀʀᴋ 和U+0BB3ᴛᴀᴍɪʟ ʟᴇᴛᴛᴇʀ ʟʟᴀ 看起来完全一样。但是,U+0BCC是一个间距标记,而U+0BB3不是。如果在输入中使用U+0BCC而不是U+0BB3,结果就是您所期望的
恕我直言,我会说你使用了错误的字符,但我对泰米尔语一无所知,所以我不能确定。这不是Unicode字符或类的错误, 具体到语言() 字母由任何字母组成,后跟可视标志符号 例如- க -\u0b95 ெ -\u0bc6 ள -\u0bb3 形成泰米尔文字'கெள' 而它似乎类似于视觉符号的形成 க -\u0b95 ௌ-\u0bcc 以及它正确的解决形式。 因此,在列举泰米尔人的性格之前,我们必须先替换不规则的性格结构
using System;
using System.Collections.Generic;
using System.Globalization;
namespace Glyphtest
{
internal class Program
{
private static void Main()
{
const string unicodetxt1 = "ஊரவர் கெளவை";
List<string> output = Syllabify(unicodetxt1);
Console.WriteLine(output.Count);
const string unicodetxt2 = "கௌவை";
output = Syllabify(unicodetxt2);
Console.WriteLine(output.Count);
}
public static List<string> Syllabify(string unicodetext)
{
if (string.IsNullOrEmpty(unicodetext)) return null;
TextElementEnumerator enumerator = StringInfo.GetTextElementEnumerator(unicodetext);
var data = new List<string>();
while (enumerator.MoveNext())
data.Add(enumerator.Current.ToString());
return data;
}
}
}
与泰米尔语语法规则一样()
视觉符号(ௌ) 将作为一个单词的起始字母出现
因此,上述代码应按如下方式处理:
internal class Program
{
private static void Main()
{
const string unicodetxt1 = "ஊரவர் கெளவை";
List<string> output = Syllabify(unicodetxt1);
Console.WriteLine(output.Count);
const string unicodetxt2 = "கௌவை";
output = Syllabify(unicodetxt2);
Console.WriteLine(output.Count);
}
public static string CheckVisualGlyphPattern(string txt)
{
string[] data = txt.Split(new[] { ' ', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
string list = string.Empty;
var rx = new Regex("^(.*?){1}(\u0bc6){1}(\u0bb3){1}");
foreach (string s in data)
{
var matches = new List<Match>();
string outputs = rx.Replace(s, match =>
{
matches.Add(match);
return string.Format("{0}\u0bcc", match.Groups[1].Value);
});
list += string.Format("{0} ", outputs);
}
return list.Trim();
}
public static List<string> Syllabify(string unicodetext)
{
var processdata = CheckVisualGlyphPattern(unicodetext);
if (string.IsNullOrEmpty(processdata)) return null;
TextElementEnumerator enumerator = StringInfo.GetTextElementEnumerator(processdata);
var data = new List<string>();
while (enumerator.MoveNext())
data.Add(enumerator.Current.ToString());
return data;
}
}
内部类程序
{
私有静态void Main()
{
常量字符串unicodetxt1=”ஊரவர் கெளவை";
列表输出=音节化(unicodetxt1);
Console.WriteLine(output.Count);
常量字符串unicodetxt2=”கௌவை";
输出=音节化(unicodetxt2);
Console.WriteLine(output.Count);
}
公共静态字符串检查VisualGlyphPattern(字符串txt)
{
string[]data=txt.Split(新[]{'','\r','\n'},StringSplitOptions.RemoveEmptyEntries);
string list=string.Empty;
var rx=new Regex(“^(.*){1}(\u0bc6){1}(\u0bb3){1}”);
foreach(数据中的字符串s)
{
var matches=新列表();
字符串输出=接收。替换,匹配=>
{
匹配。添加(匹配);
返回string.Format(“{0}\u0bcc”,match.Groups[1].Value);
});
list+=string.Format(“{0}”,输出);
}
returnlist.Trim();
}
公共静态列表提纲(字符串Unicodext)
{
var processdata=CheckVisualGlyphPattern(unicodetext);
if(string.IsNullOrEmpty(processdata))返回null;
TextElementEnumerator枚举器=StringInfo.G