此八位位组流如何解释为希伯来语UTF-8编码?
|
以下字节流由UTF-8标识,其中包含希伯来语句子:“ 0”。我正在尝试了解编码。
ubuntu@ip-10-126-21-104:~$ od -t x1 homeless-title-fromwireshark_followed_by_hexdump.txt
0000000 0a 09 d7 93 d7 99 d7 a8 d7 95 d7 aa 20 d7 9c d7
0000020 a9 d7 95 d7 aa d7 a4 d7 99 d7 9d 20 20 d7 91 d7
0000040 aa d7 9c 20 d7 90 d7 91 d7 99 d7 91 20 2d 20 d7
0000060 94 d7 95 d7 9e d7 9c d7 a1 0a
0000072
ubuntu@ip-10-126-21-104:~$ file -i homeless-title-fromwireshark_followed_by_hexdump.txt
homeless-title-fromwireshark_followed_by_hexdump.txt: text/plain; charset=utf-8
该文件为UTF-8,我已通过打开记事本(Windows 7),输入希伯来语字符ד
并保存文件来对此进行了验证。其结果产生以下结果:
ubuntu@ip-10-126-21-104:~$ od -t x1 test_from_notepad_utf8_daled.txt
0000000 ef bb bf d7 93
0000005
ubuntu@ip-10-126-21-104:~$ file -i test_from_notepad_utf8_daled.txt
test_from_notepad_utf8_daled.txt: text/plain; charset=utf-8
其中“ 4”是以utf-8格式编码的BOM,而“ 5”正是在“ 6”之后出现在原始流中的字节序列(换行,ascii中的制表符)。
这里的问题是,通过unicode代码页,应将ד
编码为05 D3
,为什么utf-8编码为什么以及如何变成d7 93
?
二进制中的d7 93
是11010111 10010011
,而
二进制中的05 D3
是00000101 11010011
我似乎找不到适合这些编码的正确转换,(据我所知)代表相同的Unicode实体,即\“ HEBREW LETTER DALET \”
谢谢,
格言。
没有找到相关结果
已邀请:
3 个回复
荆怖赡
0x05D3的最后6位是010011;以10开头的前缀表示1001 0011或0x93。 前5位为10111;以110开头的前缀,则给出1101 0111或0xD7。 因此,用于U + 05D3的UTF-8编码为0xD7 0x93。 对于U + 0800向上的Unicode代码点,还有更多规则,它们需要3或4(但不更多)字节的UTF-8表示形式。连续字节始终具有10yyyyyy位模式。第一个字节的位模式为1110xxxx(3个字节值)和11110xxx(4个字节值)。有许多字节值不能出现在有效的UTF-8中。它们是0xC0、0xC1和0xF5..0xFF。
期差骇蓟
的值是U + 05D3或
。但这只是一个数字,并且不会告诉您如何“编码”文件/内存中的代码点(即一组实际位)... UTF-8(以及UTF) -16,UTF-32和其他各种方案)告诉您如何执行此操作。 实际上,有一种将Unicode代码点转换为UTF-8字符的公式化方法(但这是一个完全不同的SO问题)。事实证明,在UTF-8中,“ 15”被编码为“ 18”。顺便说一句,如果找到允许您另存为UTF-32或UCS-4的文本编辑器,您会发现(除了非常大的文件之外)您用十六进制编辑器看到的字节应该匹配Unicode规范中的代码点。 此页面可能会提供有关该字符的某些表示的一些额外信息。 要对Unicode进行出色的介绍,我建议Joel Spolsky的《每个软件开发人员绝对绝对肯定要了解Unicode和字符集的绝对最低要求》(无借口!)。
死簇
或
。 BOM表通常用于告诉您正在使用哪种编码,如果数据的编码不明确,则字节序是什么。 还有UTF-7,但我从未在野外看到它。