ด้้้้้็็็็็้้้้้็็็็็้้้้้็็็็็้้้้้็็็็็้้้้้็็็็็้้้้้็็็็็้้้้้็็็็็้้้้้дด็็็็็้้้้้็็็็้้้้้็็็็็้้้้้็็็็็้้้้้็็็็็้้้้้
我发现了一些有趣的字符,就像我粘贴在上面只有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\XB 9\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
Run Code Online (Sandbox Code Playgroud)
我的问题是:
UPDATE
我用更多浏览器测试了角色,长尾只出现在windows平台上的chrome和firefox中.
以下是我拍摄的截图:
赢7 ie8

ubuntu firefox

赢得7铬

赢得7火狐

因此,我猜这是一个与浏览器相关的bug.
有两个问题,一个在输出系统(字体渲染器)中,它不是泰语识别的,一个在输入系统中首先生成此文本.
如果你已完成作业,你会知道mai tho和maitaikhu(UniCode名称)是UniCode所指的非间距标记(NSM).这意味着在显示此字形时,字体渲染器不应移动到下一个字符单元格.
为了避免上面看到的混乱,Thai API Consortium(TAPIC)制定了WTT 2.0标准,该标准描述了字体渲染算法在接收泰语字母顺序作为输入时应如何处理泰语字母顺序以及输入方法应如何允许如果您尝试键入它们,则输入字符.
libthai包括输入和输出方法.
thaicheck是一个小程序,可以检测字母序列问题并修复它们.
顺便说一句,你不能有de dek,mai tho和maitaikhu的序列(单词); 输入序列是噪音.
请记住,某些编辑器已经破坏了输入方法,允许键入多个无法组合的NSM,但输出方法只会呈现合法的序列; 结果是一个非法的输入字符串,对他的系统上的用户看起来没问题.
你提到的代码都是UTF-8的,这就是为什么每个字符需要3个字节。相应的Unicode 代码是:
后两个位于 类别 中Mark, Nonspacing,并且Combine属性 ( Canonical_Combining_Class ) 设置为 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);
Run Code Online (Sandbox Code Playgroud)
输出:
number of code points: 3
number of text elements: 1
Run Code Online (Sandbox Code Playgroud)
另请参见.Net StringInfo 类。
| 归档时间: |
|
| 查看次数: |
9293 次 |
| 最近记录: |