TCP接收扩展的ASCII或utf-8字符

时间:2011-02-08 12:06:51

标签: c tcp winsock

对于反转问号¿我收到两个字节[-62] [ - 65]但是如何获得可读的utf-8或ASCII字符编码?

3 个答案:

答案 0 :(得分:3)

该字符的UTF8代码。 inverted question mark是Unicode代码点191,在UTF8中为0xc2:0xbf

您将其视为已签名字节。例如-62签名为256-62194无符号 - 这是十六进制0xc2

同样,签名-65256-65191无符号 - 这是十六进制0xbf

如果要将UTF8序列转换为代码点,可以使用下表。

    Range              Encoding  Binary value
    -----------------  --------  --------------------------
    U+000000-U+00007f  0xxxxxxx  0xxxxxxx

    U+000080-U+0007ff  110yyyxx  00000yyy xxxxxxxx
                       10xxxxxx

    U+000800-U+00ffff  1110yyyy  yyyyyyyy xxxxxxxx
                       10yyyyxx
                       10xxxxxx

    U+010000-U+10ffff  11110zzz  000zzzzz yyyyyyyy xxxxxxxx
                       10zzyyyy
                       10yyyyxx
                       10xxxxxx

例如,您的0xc2:0xbf是二进制11000010 10111111,与第二种情况匹配:

      11000010 10111111
         |||||   ||||||
         |||\\  //////
         ||| ||||||||
    00000000 10111111  ->  0x00bf  ->  191

答案 1 :(得分:1)

那些可能的2个字节是 UTF-8

对于ASCII,您需要一个特定的代码页。

究竟什么是'可读'字符编码?

答案 2 :(得分:1)

以十六进制查看字节值:

  • -62是0xc2
  • -65是0xbf

如果您查询有问题的字形的Unicode information,您可以看到,这是构成反转问号字形的UTF-8编码的两个字节。