为什么 tree 命令在 Ubuntu 22.04 上打印 NBSP

为什么 tree 命令在 Ubuntu 22.04 上打印 NBSP

我安装了 tree v 2.0.2,在终端中它可以正确显示输出,但是当我将输出发送到 .txt 文件时,它包含一堆 NBSP,破坏了显示。复制终端输出时也会发生这种情况。

以前没有发生过这种情况。这是版本 2 中的新“功能”吗?如何让它显示普通空格而不是 NBSP(用于 HTML)?

编辑:来自树的输出。/| xxd

$ tree ./ | xxd
00000000: 2e2f 0ae2 949c e294 80e2 9480 2063 6830  ./.......... ch0
00000010: 332e 696d 6c0a e294 9ce2 9480 e294 8020  3.iml.......... 
00000020: 646f 630a e294 82c2 a0c2 a020 e294 9ce2  doc........ ....
00000030: 9480 e294 8020 6375 726c 2e74 7874 0ae2  ..... curl.txt..
00000040: 9482 c2a0 c2a0 20e2 949c e294 80e2 9480  ...... .........
00000050: 2064 6966 662e 7478 740a e294 82c2 a0c2   diff.txt.......
00000060: a020 e294 9ce2 9480 e294 8020 7265 6164  . ......... read
00000070: 6d65 2e74 7874 0ae2 9482 c2a0 c2a0 20e2  me.txt........ .
00000080: 949c e294 80e2 9480 2074 7265 652e 6874  ........ tree.ht
00000090: 6d6c 0ae2 9482 c2a0 c2a0 20e2 9494 e294  ml........ .....
000000a0: 80e2 9480 2074 7265 652e 7478 740a e294  .... tree.txt...
000000b0: 9ce2 9480 e294 8020 676f 2e6d 6f64 0ae2  ....... go.mod..
000000c0: 949c e294 80e2 9480 2067 6f2e 7375 6d0a  ........ go.sum.
000000d0: e294 9ce2 9480 e294 8020 6d65 7461 6461  ......... metada
000000e0: 7461 0ae2 9482 c2a0 c2a0 20e2 949c e294  ta........ .....
000000f0: 80e2 9480 2063 6d64 0ae2 9482 c2a0 c2a0  .... cmd........
00000100: 20e2 9482 c2a0 c2a0 20e2 9494 e294 80e2   ....... .......
00000110: 9480 206d 6169 6e2e 676f 0ae2 9482 c2a0  .. main.go......
00000120: c2a0 20e2 949c e294 80e2 9480 2069 6e74  .. ......... int
00000130: 6572 6e61 6c0a e294 82c2 a0c2 a020 e294  ernal........ ..
00000140: 82c2 a0c2 a020 e294 9ce2 9480 e294 8020  ..... ......... 
00000150: 636f 6e74 726f 6c6c 6572 0ae2 9482 c2a0  controller......
00000160: c2a0 20e2 9482 c2a0 c2a0 20e2 9482 c2a0  .. ....... .....
00000170: c2a0 20e2 9494 e294 80e2 9480 206d 6574  .. ......... met
00000180: 6164 6174 610a e294 82c2 a0c2 a020 e294  adata........ ..
00000190: 82c2 a0c2 a020 e294 82c2 a0c2 a020 2020  ..... .......   
000001a0: 2020 e294 94e2 9480 e294 8020 636f 6e74    ......... cont
000001b0: 726f 6c6c 6572 2e67 6f0a e294 82c2 a0c2  roller.go.......
000001c0: a020 e294 82c2 a0c2 a020 e294 9ce2 9480  . ....... ......
000001d0: e294 8020 6861 6e64 6c65 720a e294 82c2  ... handler.....
000001e0: a0c2 a020 e294 82c2 a0c2 a020 e294 82c2  ... ....... ....
000001f0: a0c2 a020 e294 94e2 9480 e294 8020 6874  ... ......... ht
00000200: 7470 0ae2 9482 c2a0 c2a0 20e2 9482 c2a0  tp........ .....
00000210: c2a0 20e2 9482 c2a0 c2a0 2020 2020 20e2  .. .......     .
00000220: 9494 e294 80e2 9480 2068 7474 702e 676f  ........ http.go
00000230: 0ae2 9482 c2a0 c2a0 20e2 9482 c2a0 c2a0  ........ .......
00000240: 20e2 9494 e294 80e2 9480 2072 6570 6f73   ......... repos
00000250: 6974 6f72 790a e294 82c2 a0c2 a020 e294  itory........ ..
00000260: 82c2 a0c2 a020 2020 2020 e294 9ce2 9480  .....     ......
00000270: e294 8020 6572 726f 722e 676f 0ae2 9482  ... error.go....
00000280: c2a0 c2a0 20e2 9482 c2a0 c2a0 2020 2020  .... .......    
00000290: 20e2 9494 e294 80e2 9480 206d 656d 6f72   ......... memor
000002a0: 790a e294 82c2 a0c2 a020 e294 82c2 a0c2  y........ ......
000002b0: a020 2020 2020 2020 2020 e294 94e2 9480  .         ......
000002c0: e294 8020 6d65 6d6f 7279 2e67 6f0a e294  ... memory.go...
000002d0: 82c2 a0c2 a020 e294 94e2 9480 e294 8020  ..... ......... 
000002e0: 706b 670a e294 82c2 a0c2 a020 2020 2020  pkg........     
000002f0: e294 94e2 9480 e294 8020 6d6f 6465 6c0a  ......... model.
00000300: e294 82c2 a0c2 a020 2020 2020 2020 2020  .......         
00000310: e294 94e2 9480 e294 8020 6d65 7461 6461  ......... metada
00000320: 7461 2e67 6f0a e294 9ce2 9480 e294 8020  ta.go.......... 
00000330: 6d6f 7669 650a e294 82c2 a0c2 a020 e294  movie........ ..
00000340: 9ce2 9480 e294 8020 636d 640a e294 82c2  ....... cmd.....
00000350: a0c2 a020 e294 82c2 a0c2 a020 e294 94e2  ... ....... ....
00000360: 9480 e294 8020 6d61 696e 2e67 6f0a e294  ..... main.go...
00000370: 82c2 a0c2 a020 e294 9ce2 9480 e294 8020  ..... ......... 
00000380: 696e 7465 726e 616c 0ae2 9482 c2a0 c2a0  internal........
00000390: 20e2 9482 c2a0 c2a0 20e2 949c e294 80e2   ....... .......
000003a0: 9480 2063 6f6e 7472 6f6c 6c65 720a e294  .. controller...
000003b0: 82c2 a0c2 a020 e294 82c2 a0c2 a020 e294  ..... ....... ..
000003c0: 82c2 a0c2 a020 e294 94e2 9480 e294 8020  ..... ......... 
000003d0: 6d6f 7669 650a e294 82c2 a0c2 a020 e294  movie........ ..
000003e0: 82c2 a0c2 a020 e294 82c2 a0c2 a020 2020  ..... .......   
000003f0: 2020 e294 94e2 9480 e294 8020 636f 6e74    ......... cont
00000400: 726f 6c6c 6572 2e67 6f0a e294 82c2 a0c2  roller.go.......
00000410: a020 e294 82c2 a0c2 a020 e294 9ce2 9480  . ....... ......
00000420: e294 8020 6761 7465 7761 790a e294 82c2  ... gateway.....
00000430: a0c2 a020 e294 82c2 a0c2 a020 e294 82c2  ... ....... ....
00000440: a0c2 a020 e294 9ce2 9480 e294 8020 6572  ... ......... er
00000450: 726f 722e 676f 0ae2 9482 c2a0 c2a0 20e2  ror.go........ .
00000460: 9482 c2a0 c2a0 20e2 9482 c2a0 c2a0 20e2  ...... ....... .
00000470: 949c e294 80e2 9480 206d 6574 6164 6174  ........ metadat
00000480: 610a e294 82c2 a0c2 a020 e294 82c2 a0c2  a........ ......
00000490: a020 e294 82c2 a0c2 a020 e294 82c2 a0c2  . ....... ......
000004a0: a020 e294 94e2 9480 e294 8020 6874 7470  . ......... http
000004b0: 0ae2 9482 c2a0 c2a0 20e2 9482 c2a0 c2a0  ........ .......
000004c0: 20e2 9482 c2a0 c2a0 20e2 9482 c2a0 c2a0   ....... .......
000004d0: 2020 2020 20e2 9494 e294 80e2 9480 206d       ......... m
000004e0: 6574 6164 6174 612e 676f 0ae2 9482 c2a0  etadata.go......
000004f0: c2a0 20e2 9482 c2a0 c2a0 20e2 9482 c2a0  .. ....... .....
00000500: c2a0 20e2 9494 e294 80e2 9480 2072 6174  .. ......... rat
00000510: 696e 670a e294 82c2 a0c2 a020 e294 82c2  ing........ ....
00000520: a0c2 a020 e294 82c2 a0c2 a020 2020 2020  ... .......     
00000530: e294 94e2 9480 e294 8020 6874 7470 0ae2  ......... http..
00000540: 9482 c2a0 c2a0 20e2 9482 c2a0 c2a0 20e2  ...... ....... .
00000550: 9482 c2a0 c2a0 2020 2020 2020 2020 20e2  ......         .
00000560: 9494 e294 80e2 9480 2072 6174 696e 672e  ........ rating.
00000570: 676f 0ae2 9482 c2a0 c2a0 20e2 9482 c2a0  go........ .....
00000580: c2a0 20e2 9494 e294 80e2 9480 2068 616e  .. ......... han
00000590: 646c 6572 0ae2 9482 c2a0 c2a0 20e2 9482  dler........ ...
000005a0: c2a0 c2a0 2020 2020 20e2 9494 e294 80e2  ....     .......
000005b0: 9480 2068 7474 700a e294 82c2 a0c2 a020  .. http........ 
000005c0: e294 82c2 a0c2 a020 2020 2020 2020 2020  .......         
000005d0: e294 94e2 9480 e294 8020 6874 7470 2e67  ......... http.g
000005e0: 6f0a e294 82c2 a0c2 a020 e294 94e2 9480  o........ ......
000005f0: e294 8020 706b 670a e294 82c2 a0c2 a020  ... pkg........ 
00000600: 2020 2020 e294 94e2 9480 e294 8020 6d6f      ......... mo
00000610: 6465 6c0a e294 82c2 a0c2 a020 2020 2020  del........     
00000620: 2020 2020 e294 94e2 9480 e294 8020 6d6f      ......... mo
00000630: 7669 652e 676f 0ae2 949c e294 80e2 9480  vie.go..........
00000640: 2070 6b67 0ae2 9482 c2a0 c2a0 20e2 9494   pkg........ ...
00000650: e294 80e2 9480 2064 6973 636f 7665 7279  ...... discovery
00000660: 0ae2 9482 c2a0 c2a0 2020 2020 20e2 949c  ........     ...
00000670: e294 80e2 9480 2063 6f6e 7375 6c0a e294  ...... consul...
00000680: 82c2 a0c2 a020 2020 2020 e294 82c2 a0c2  .....     ......
00000690: a020 e294 94e2 9480 e294 8020 636f 6e73  . ......... cons
000006a0: 756c 2e67 6f0a e294 82c2 a0c2 a020 2020  ul.go........   
000006b0: 2020 e294 9ce2 9480 e294 8020 6469 7363    ......... disc
000006c0: 6f76 6572 792e 676f 0ae2 9482 c2a0 c2a0  overy.go........
000006d0: 2020 2020 20e2 9494 e294 80e2 9480 206d       ......... m
000006e0: 656d 6f72 790a e294 82c2 a0c2 a020 2020  emory........   
000006f0: 2020 2020 2020 e294 94e2 9480 e294 8020        ......... 
00000700: 6d65 6d6f 7279 2e67 6f0a e294 94e2 9480  memory.go.......
00000710: e294 8020 7261 7469 6e67 0a20 2020 20e2  ... rating.    .
00000720: 949c e294 80e2 9480 2063 6d64 0a20 2020  ........ cmd.   
00000730: 20e2 9482 c2a0 c2a0 20e2 9494 e294 80e2   ....... .......
00000740: 9480 206d 6169 6e2e 676f 0a20 2020 20e2  .. main.go.    .
00000750: 949c e294 80e2 9480 2069 6e74 6572 6e61  ........ interna
00000760: 6c0a 2020 2020 e294 82c2 a0c2 a020 e294  l.    ....... ..
00000770: 9ce2 9480 e294 8020 636f 6e74 726f 6c6c  ....... controll
00000780: 6572 0a20 2020 20e2 9482 c2a0 c2a0 20e2  er.    ....... .
00000790: 9482 c2a0 c2a0 20e2 9494 e294 80e2 9480  ...... .........
000007a0: 2072 6174 696e 670a 2020 2020 e294 82c2   rating.    ....
000007b0: a0c2 a020 e294 82c2 a0c2 a020 2020 2020  ... .......     
000007c0: e294 94e2 9480 e294 8020 636f 6e74 726f  ......... contro
000007d0: 6c6c 6572 2e67 6f0a 2020 2020 e294 82c2  ller.go.    ....
000007e0: a0c2 a020 e294 9ce2 9480 e294 8020 6861  ... ......... ha
000007f0: 6e64 6c65 720a 2020 2020 e294 82c2 a0c2  ndler.    ......
00000800: a020 e294 82c2 a0c2 a020 e294 94e2 9480  . ....... ......
00000810: e294 8020 6874 7470 0a20 2020 20e2 9482  ... http.    ...
00000820: c2a0 c2a0 20e2 9482 c2a0 c2a0 2020 2020  .... .......    
00000830: 20e2 9494 e294 80e2 9480 2068 7474 702e   ......... http.
00000840: 676f 0a20 2020 20e2 9482 c2a0 c2a0 20e2  go.    ....... .
00000850: 9494 e294 80e2 9480 2072 6570 6f73 6974  ........ reposit
00000860: 6f72 790a 2020 2020 e294 82c2 a0c2 a020  ory.    ....... 
00000870: 2020 2020 e294 9ce2 9480 e294 8020 6572      ......... er
00000880: 726f 722e 676f 0a20 2020 20e2 9482 c2a0  ror.go.    .....
00000890: c2a0 2020 2020 20e2 9494 e294 80e2 9480  ..     .........
000008a0: 206d 656d 6f72 790a 2020 2020 e294 82c2   memory.    ....
000008b0: a0c2 a020 2020 2020 2020 2020 e294 94e2  ...         ....
000008c0: 9480 e294 8020 6d65 6d6f 7279 2e67 6f0a  ..... memory.go.
000008d0: 2020 2020 e294 94e2 9480 e294 8020 706b      ......... pk
000008e0: 670a 2020 2020 2020 2020 e294 94e2 9480  g.        ......
000008f0: e294 8020 6d6f 6465 6c0a 2020 2020 2020  ... model.      
00000900: 2020 2020 2020 e294 94e2 9480 e294 8020        ......... 
00000910: 7261 7469 6e67 2e67 6f0a 0a34 3120 6469  rating.go..41 di
00000920: 7265 6374 6f72 6965 732c 2033 3020 6669  rectories, 30 fi
00000930: 6c65 730a                                les.

答案1

查看 的tree源代码,它似乎支持多种字符集,包括 UTF-8,并且在 UTF-8 模式下打印 NBSP 字符已经是近 20 年的行为了。

这是该软件的第一个版本,似乎明显包含 NBSP:https://gitlab.com/OldManProgrammer/unix-tree/-/blob/1ac08f9fbd9f2175605a43110108917f62579d6d/tree.c#L1665

{ utf8,        "\342\224\202\302\240\302\240",
               "\342\224\234\342\224\200", "\342\224\224\342\224\200", "\302\251" },

\302\240是 NBSP 的 UTF-8 编码,每个字节以八进制表示。

这段源代码经过了几次细微的改动,并被移到了不同​​的文件中,但在我看来,\302\240从那时起它就一直被使用,而不是常规的空间。

您是否确定以前没有发生过这种情况,并且您不是现在才发现这种行为?也许默认字符集(内置于源代码中,或通过环境变量)最近发生了变化。也许某些 Ubuntu 特定补丁发生了变化,我还没有检查过这些。也许我遗漏了什么。

答案2

chatGPT 来帮忙了(第一个响应不正确,第二个响应有效)。以下是如何用常规空格替换 NBSP:

tree | sed 's/\xc2\xa0/ /g' > output.txt

NBSP 仅显示在某些编辑器(SublimeText、Intellij)中,但不会显示于 TextEditor 中。

相关内容