Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的Unicode文本文件的hextump与我手动输入的字节序列不同?_Unicode_Hexdump - Fatal编程技术网

为什么我的Unicode文本文件的hextump与我手动输入的字节序列不同?

为什么我的Unicode文本文件的hextump与我手动输入的字节序列不同?,unicode,hexdump,Unicode,Hexdump,为什么以下内容会导致hextump中出现如此不同的字节序列 $ echo -e "\u0f67\u0fb9\u0fa8\u0fb3\u0fba\u0fbc\u0fbb\u0f83\u0f0b" > uni $ hexdump uni 0000000 bde0 e0a7 b9be bee0 e0a8 b3be bee0 e0ba 0000010 bcbe bee0 e0bb 83be bce0 0a8b 000001c $ locale LANG=en_US.UTF-8 LC_CTYPE=

为什么以下内容会导致hextump中出现如此不同的字节序列

$ echo -e "\u0f67\u0fb9\u0fa8\u0fb3\u0fba\u0fbc\u0fbb\u0f83\u0f0b" > uni
$ hexdump uni
0000000 bde0 e0a7 b9be bee0 e0a8 b3be bee0 e0ba
0000010 bcbe bee0 e0bb 83be bce0 0a8b
000001c

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE=C
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

区域设置正确设置为:en_US.UTF-8,实际unicode输出正确:ཧྐྵྨླྺྼྻྃ་

我的误解源于认为我所呼应的字符是utf8,而实际上是utf16。当启动时,utf8显示为

 e0 bd a7

应该是大端的。因此,要更改endianess,可以使用-C参数运行hextump。

我的第一个猜测是UTF-8。在UTF-8中,U+0F67是0xE0 0xBD 0xA7。但这个输出看起来像是UTF-8的一个混乱变体。
$locale
输出什么?不,那肯定是utf-8编码版本。字节顺序很笨拙,显示起来好像是utf-16le。