PDF 属性 字段中的奇怪编码

Strange encoding in PDF property fields

我对文档属性(标题、作者等)如何存储在 PDF 文件中有疑问。它看起来像 big-endian 字节顺序的 UTF-16。

因此 "MyName" 将被编码为: FE FF 00 4D 00 79 00 4E 00 61 00 6D 00 65

然而,我运行进入这个应该有值FF 0D的字符“-”,但是我在它的位置找到了这些十六进制数字FF 5C 72

所以 "My-Name" 看起来像这样: FE FF 00 4D 00 79 FF 5C 72 00 4E 00 61 00 6D 00 65

有人知道这里为什么用FF 5C 72吗?为什么其他地方都是 UTF-16 而只有 3 个字节?为什么这些值?

您没有正确解释所见:

  1. FE FF 是序列的开始。
  2. 00 是一个 null 字节。
  3. 4D 在你的情况下很可能转化为 M.
  4. 79 在你的情况下很可能转化为 y.
  5. 4E 在你的情况下很可能转化为 N.
  6. 61 在你的情况下很可能转化为 a.
  7. 6D 在你的情况下很可能转化为 m.
  8. 65 在您的情况下很可能转化为 e.

将此与我的简单 ascii 命令行工具的输出进行比较,该工具将所有 ASCII 别名的列表打印为 table 及其 hexdec 编码:

$ ascii -h
Usage: ascii [-dxohv] [-t] [char-alias...]
   -t = one-line output  -d = Decimal table  -o = octal table  -x = hex table
   -h = This help screen -v = version information
Prints all aliases of an ASCII character. Args may be chars, C \-escapes,
English names, ^-escapes, ASCII mnemonics, or numerics in decimal/octal/hex.

Dec Hex    Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex   Dec Hex  
  0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p
  1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q
  2 02 STX  18 12 DC2  34 22 "  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r
  3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s
  4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t
  5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u
  6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v
  7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w
  8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x
  9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y
 10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z
 11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {
 12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \  108 6C l  124 7C |
 13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }
 14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~
 15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL

哦,惊喜!

这个 table 完全符合我上面的 "assumptions"。所以你可以放心地重新考虑你自己的 "UTF-16 in big-endian byte order".

这意味着对于您所讨论的十六进制数,FF 5C 72?!?

好吧,查一下:FF可以跳过,5C 72\r...什么意思? (作为对 reader 的练习留下的答案)