ด้้้้้็็็็็้้้้้็็็็็้้้้้็็็็็้้้้้็็็็็้้้้้็็็็็้้้้้็็็็็้้้้้็็็็็้้้้้дด็็็็็้้้้้็็็็้้้้้็็็็็้้้้้็็็็็้้้้้็็็็็้้้้้
我发现了一些有趣的人物,就像我贴在上面一样,只有3个空格宽。然而,字符串的实际长度是380。
我检查了python中的字符串,字符串代码如下:
'\xe0\xb8\x94\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xd0\xb4\xe0\xb8\x94\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x87\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89\xe0\xb9\x89‘
字符串似乎是三个泰语字符的组合:
ด \xe0\xb8\x94 THAI CHARACTER DO DEK
้ \xe0\xb9\x89 THAI CHARACTER MAI THO
็ \xe0\xb9\x87 THAI CHARACTER MAITAIKHU
我的问题是:
更新
我用更多的浏览器测试了这些字符,而长尾只出现在windows平台上的chrome和firefox中。
以下是我拍摄的截图:
win 7 ie8
ubuntu firefox
win 7铬
win 7 firefox
因此,我想这是一个与浏览器相关的错误。
发布于 2011-08-19 10:19:02
有两个问题,一个在输出系统(字体呈现器)中没有泰国语,另一个在输入系统中,首先生成这个文本。
如果您已经完成了作业,您就会知道mai和maitaikhu (UniCode名称)是UniCode所指的非间距标记(NSM)。这意味着当显示此字形时,字体呈现器不应移动到下一个字符单元格。
为了避免上面看到的混乱,泰国API联合会(TAPIC)制定了WTT 2.0标准,该标准既描述了字体呈现算法在接收到泰国字母顺序作为输入时应该如何处理它,也描述了如果尝试键入这些字符,输入方法应该如何允许输入这些字符。
泰语标准化与实现概述
李柏泰包括输入和输出方法。
塔希克是一个小程序,可以检测字母顺序问题并修复它们。
顺便说一句,你不能有一个序列(字)的多德克,麦索和梅塔伊库;输入序列是噪音。
请记住,一些编辑器已经中断了允许键入无法组合的多个NSM的输入方法,但是输出方法将只呈现合法的序列;结果是一个非法的输入字符串,对系统上的用户来说是OK的。
发布于 2011-08-19 10:18:27
您提到的代码都在UTF-8中,这就是为什么每个字符需要3个字节的原因。尊敬的Unicode码是:
后两者在类别Mark, Nonspacing
中,并将Combine
属性(班级)设置为107,这意味着在呈现过程中代码点与前面的代码点组合在一起。
您的示例从一个字符开始,并在上面添加了许多非间距标记。
与此C#代码相比:
char DODEK = (char)0x0e14;
char MAITHO = (char)0x0e49;
char MAITAIKHU = (char)0x0e47;
string thai = new string(new char[] { DODEK, MAITHO, MAITAIKHU });
Console.WriteLine("number of code points: " + thai.Length);
var si = new System.Globalization.StringInfo(thai);
Console.WriteLine("number of text elements: " + si.LengthInTextElements);
输出:
number of code points: 3
number of text elements: 1
另见.Net StringInfo类。
发布于 2014-02-28 12:25:09
您不应该将数百个unicode字符组合成一个图形字符,尽管unicode格式在技术上是允许的;通常组合的字符不超过2或3个。
在泰语中,您有元音和音调标记,它们显示在辅音字符的上方(有时元音出现在辅音字符下面,甚至在辅音字符周围.)。它有点像法语元音的重音(é,è.)或者是德语的货币。在泰国有超过两个这样的标志是不正常的(在法语或德语中有一个以上)。这意味着您的输入是非法的泰国文本(可能是为了提供一些有趣的图形效果,如"ASCII艺术“)。这些非法文本根据浏览器被不同的解释,我并不感到惊讶。
https://stackoverflow.com/questions/7119115
复制相似问题