Max*_*ler 3 unicode encoding utf-8 character-encoding hebrew
以下字节流由UTF-8标识,它包含希伯来语句子:????? ??????? ??? ???? - ?????.我正在尝试理解编码.
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
Run Code Online (Sandbox Code Playgroud)
该文件是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
Run Code Online (Sandbox Code Playgroud)
ef bb bfBOM在哪里以utf-8形式编码,并且d7 93正好是原始流中出现的字节序列0a 09(新行,ascii中的制表符).
这里的问题是,通过unicode代码页,?应该编码05 D3为什么以及utf-8编码是如何形成的d7 93?
d7 93在二进制中是11010111 10010011,而
05 D3在二进制中是00000101 11010011
我似乎无法找到对这些编码有意义的正确转换,(据我的理解)代表相同的Unicode实体,即"HEBREW LETTER DALET"
谢谢你,
马克西姆.
Unicode定义(除其他外)一堆"代码点"并给每个代码点一个数值.值为HEBREW LETTER DALETU + 05D3或0x05D3.但这只是一个数字,并没有告诉你如何在文件/内存中"编码"代码点(即实际位集)... UTF-8(以及UTF-16,UTF- 32和其他各种方案)告诉你如何做到这一点.
实际上有一种将Unicode代码点转换为UTF-8字符的公式化方法(但这是一个完全不同的SO问题).事实证明,在UTF-8中,HEBREW LETTER DALET编码为0xD7 0x93.顺便说一句,如果你找到一个允许你保存为UTF-32或UCS-4的文本编辑器,你会发现(除了一个非常大的文件)你用十六进制编辑器看到的字节应该匹配代码指向Unicode规范.
此页面可能会提供有关该一个字符的某些表示的一些额外信息.
对于Unicode的一个很好的介绍,我建议Joel Spolsky的绝对最低每个软件开发人员绝对必须知道关于Unicode和字符集(没有借口!).