我安装了 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 中。