根据维基百科UTF-8页面,我从人们那里听到了相互矛盾的观点。
它们是一样的,不是吗?有人能澄清一下吗?
根据维基百科UTF-8页面,我从人们那里听到了相互矛盾的观点。
它们是一样的,不是吗?有人能澄清一下吗?
当前回答
你通常从谷歌开始,然后想尝试不同的东西。 但是如何打印和转换所有这些字符集呢?
这里我列出了一些有用的一行程序。
Powershell:
# Print character with the Unicode point (U+<hexcode>) using this:
[char]0x2550
# With Python installed, you can print the unicode character from U+xxxx with:
python -c 'print(u"\u2585")'
如果你有更多的Powershell trix或快捷方式,请评论。
在Bash中,你会喜欢libiconv和util-linux包中的iconv、hexdump和xxd(可能在其他*nix发行版中命名不同)。
# To print the 3-byte hex code for a Unicode character:
printf "\\\x%s" $(printf '═'|xxd -p -c1 -u)
#\xE2\x95\x90
# To print the Unicode character represented by hex string:
printf '\xE2\x96\x85'
#▅
# To convert from UTF-16LE to Unicode
echo -en "════"| iconv -f UTF-16LE -t UNICODEFFFE
# To convert a string into hex:
echo -en '═�'| xxd -g 1
#00000000: e2 95 90 ef bf bd
# To convert a string into binary:
echo -en '═�\n'| xxd -b
#00000000: 11100010 10010101 10010000 11101111 10111111 10111101 ......
#00000006: 00001010
# To convert a binary string into hex:
printf '%x\n' "$((2#111000111000000110000010))"
#e38182
其他回答
它们不是一回事——UTF-8是编码Unicode的一种特殊方式。
根据您的应用程序和您打算使用的数据,有许多不同的编码可供选择。据我所知,最常见的是UTF-8、UTF-16和UTF-32。
如果我可以总结一下我从这篇文章中收集到的信息:
Unicode将字符分配给序数(十进制形式)。(这些数字被称为码位。)
à -> 224
UTF-8是一种将这些序数(十进制形式)“转换”为二进制表示的编码。
224 -> 11000011 10100000
注意,我们讨论的是224的二进制表示,而不是它的二进制形式,即0b11100000。
Unicode是与ISO/IEC 10646一起定义通用字符集(UCS)的标准,UCS是表示几乎所有已知语言所需的所有现有字符的超集。
Unicode为其存储库中的每个字符分配一个名称和一个数字(字符代码或代码点)。
UTF-8编码,是一种在计算机内存中以数字方式表示这些字符的方法。UTF-8将每个码位映射到一个八字节序列(8位字节)
,例如,
UCS字符= Unicode字符
UCS代码点= U+24B62
UTF-8 encoding = F0 A4 AD A2 (hex) = 11110000 10100100 10101101 10100010 (bin)
UTF-8是一种使用8位序列编码Unicode字符的方法。
Unicode是一种用于表示来自多种语言的各种字符的标准。
现有的答案已经解释了很多细节,但这里有一个非常简短的答案,有最直接的解释和例子。
Unicode是将字符映射到码点的标准。 每个字符都有一个唯一的编码点(识别号),它是一个像9731这样的数字。
UTF-8是码点的编码。 为了将所有字符存储在磁盘上(在文件中),UTF-8将字符分成最多4个八位字节(8位序列)-字节。 UTF-8是几种编码(表示数据的方法)之一。例如,在Unicode中,(十进制)码位9731表示一个雪人(☃),它在UTF-8中由3个字节组成:E2 98 83
这是一个排序的列表,其中有一些随机的例子。