richardmyu / blog

个人(issues)博客
https://github.com/richardmyu/blog/issues
MIT License
0 stars 0 forks source link

乱码 or 解析问题 #26

Open richardmyu opened 3 years ago

richardmyu commented 3 years ago

1.鈹€

使用 curl wttr.in 查询天气时,出现乱码。

# 环境
windows 10 powershell
curl 7.43.0 (x86_64-pc-win32)

异常返回:

Weather report: Chengdu, China

       .-.      Light rain shower
      (   ).    +25(27) 掳C
     (___(__)   鈫?[0m 11 km/h
      鈥?鈥?鈥?鈥?  8 km
     鈥?鈥?鈥?鈥?   0.0 mm
                                                       鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?

鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? Fri 02 Jul 鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹?           Morning           鈹?            Noon      鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹攢鈹€鈹€鈹€鈹€鈹€鈹?    Evening           鈹?            Night            鈹?鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€
鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹尖攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹尖攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹尖攢
鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? _`/"".-.     Patchy rain po鈥︹攤               Cloudy         鈹?   \  /       Partly cloudy  鈹?   \  /       Partly cloudy  鈹?鈹?  ,\_(   ).   +26(28) 掳C     鈹?     .--.     +26(28) 掳C     鈹? _ /"".-.     +26(28) 掳C     鈹? _ /"".-.     +24(26) 掳C     鈹?鈹?   /(___(__)  鈫?[0m 7-9 km/h     鈹?  .-(    ).   鈫?[0m 13-16 km/h   鈹?   \_(   ).   鈫?[0m 10-12 km/h   鈹?   \_(   ).   鈫?[0m 10-15 km/h   鈹?鈹?     鈥?鈥?鈥?鈥? 10 km          鈹? (___.__)__)  10 km          鈹?   /(___(__)  10 km          鈹?   /(___(__)  10 km          鈹?鈹?    鈥?鈥?鈥?鈥?  0.0 mm | 26%   鈹?              0.1 mm | 51%   鈹?              0.0 mm | 0%    鈹?              0.0 mm | 0%    鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹粹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€
鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹粹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹粹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€
鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?                                                       鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€
鈹€鈹€鈹€鈹€鈹?
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? Sat 03 Jul 鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹?           Morning           鈹?            Noon      鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹攢鈹€鈹€鈹€鈹€鈹€鈹?    Evening           鈹?            Night            鈹?鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€ 鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹尖攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹尖攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€

正常返回:

Weather report: Chengdu, China

       .-.      Light rain shower
      (   ).    +25(27) °C
     (___(__)   ↑ 11 km/h
      ‘ ‘ ‘ ‘   8 km
     ‘ ‘ ‘ ‘    0.0 mm
                                                       ┌─────────────┐

┌──────────────────────────────┬───────────────────────┤  Fri 02 Jul ├───────────────────────┬──────────────────────────────┐
│            Morning           │             Noon      └──────┬──────┘     Evening           │             Night            │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│  _`/"".-.     Patchy rain po…│               Cloudy         │    \  /       Partly cloudy  │    \  /       Partly cloudy  │
│   ,\_(   ).   +26(28) °C     │      .--.     +26(28) °C     │  _ /"".-.     +26(28) °C     │  _ /"".-.     +24(26) °C     │
│    /(___(__)  ↙ 7-9 km/h     │   .-(    ).   ↙ 13-16 km/h   │    \_(   ).   ↑ 10-12 km/h   │    \_(   ).   ↗ 10-15 km/h   │
│      ‘ ‘ ‘ ‘  10 km          │  (___.__)__)  10 km          │    /(___(__)  10 km          │    /(___(__)  10 km          │
│     ‘ ‘ ‘ ‘   0.0 mm | 26%   │               0.1 mm | 51%   │               0.0 mm | 0%    │               0.0 mm | 0%    │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
                                                       ┌─────────────┐

┌──────────────────────────────┬───────────────────────┤  Sat 03 Jul ├───────────────────────┬──────────────────────────────┐
│            Morning           │             Noon      └──────┬──────┘     Evening           │             Night            │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│    \  /       Partly cloudy  │    \  /       Partly cloudy  │               Cloudy         │    \  /       Partly cloudy  │
│  _ /"".-.     +26(27) °C     │  _ /"".-.     +30(31) °C     │      .--.     +31(33) °C     │  _ /"".-.     +27(29) °C     │
│    \_(   ).   ↑ 7-9 km/h     │    \_(   ).   ↑ 9-11 km/h    │   .-(    ).   ↑ 9-12 km/h    │    \_(   ).   ↑ 10-16 km/h   │
│    /(___(__)  10 km          │    /(___(__)  10 km          │  (___.__)__)  10 km          │    /(___(__)  10 km          │
│               0.0 mm | 0%    │               0.0 mm | 0%    │               0.0 mm | 0%    │               0.0 mm | 0%    │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
                                                       ┌─────────────┐

┌──────────────────────────────┬───────────────────────┤  Sun 04 Jul ├───────────────────────┬──────────────────────────────┐
│            Morning           │             Noon      └──────┬──────┘     Evening           │             Night            │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│    \  /       Partly cloudy  │    \  /       Partly cloudy  │    \  /       Partly cloudy  │    \  /       Partly cloudy  │
│  _ /"".-.     +28(30) °C     │  _ /"".-.     +32(35) °C     │  _ /"".-.     +32(35) °C     │  _ /"".-.     +29(32) °C     │
│    \_(   ).   ↑ 3-4 km/h     │    \_(   ).   ↑ 6-7 km/h     │    \_(   ).   ↑ 9-11 km/h    │    \_(   ).   ↑ 6-10 km/h    │
│    /(___(__)  10 km          │    /(___(__)  10 km          │    /(___(__)  10 km          │    /(___(__)  10 km          │
│               0.0 mm | 0%    │               0.0 mm | 0%    │               0.0 mm | 0%    │               0.0 mm | 0%    │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘

对比发现发生乱码的地方:

正常符号 乱码后
°C 掳C
鈥?
鈹?
鈫?[0m
鈹屸攢
鈹€
鈹溾攢
⚡‘‘⚡‘‘ 鈿?[38;5;111;25m鈥樷€?[38;5;228;5m鈿?[38;5;111;25m鈥樷€?
‚‘‚‘‚‘‚‘ 鈥氣€樷€氣€樷€氣€樷€氣€?
...

确实很乱,比如 | 有的能正常解析,有的却乱码,被解析成 鈹?

richardmyu commented 3 years ago

2..zshrc 文件多行输出

                                  _oo0oo_
                                 088888880
                                 88" . "88
                                 (| -_- |)
                                  0\ = /0
                               ___/'---'\___
                             .' \\\\|     |// '.
                            / \\\\|||  :  |||// \\
                           /_ ||||| -:- |||||- \\
                          |   | \\\\\\  -  /// |   |
                          | \_|  ''\---/''  |_/ |
                          \  .-\__  '-'  __/-.  /
                        ___'. .'  /--.--\  '. .'___
                     ."" '<  '.___\_<|>_/___.' >'  "".
                    | | : '-  \'.;'\ _ /';.'/ - ' : | |
                    \  \ '_.   \_ __\ /__ _/   .-' /  /
                ====='-.____'.___ \_____/___.-'____.-'=====
                                  '=---='

              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                        佛祖保佑    iii    永不死机

那天偶然看到这个,感觉有趣,就建立的 md 存了下来。今天使用 bash 的时候,突然想到:要是一打开 bash,自动输出这个图就好了。于是就在 .zshrc 设置了 echo '上”图“',然后执行的时候,报了一个错:

.zshrc:12: parse error near `|'

我用的是单引号,不转义的,为啥还会有问题呢?然后鬼使神差的(不能说完全是吧,至少还知道有些配置文件,最外层只能用双引号包裹,比如 JSON),在单引号外面再套一层双引号,竟然成功了...:joy::joy::joy:,突然就被自己给秀了。

然后我试着换一下位,外单引号内双引号,结果却是报错。

至少在控制台,可以看到:

echo "'\'"
'\'

echo '"\"\
"\"

嵌套两层引号,基本不会有出现特殊字符的问题,至于引号的嵌套关系,不影响结果,而在 .zshrc 文件中,是有影响。以我有限的知识,暂时不能明白为啥,先记录下来吧!


后来看着图发呆,好像明白了,只顾着看包裹的引号,却一直忽略了”图“中的引号构成的影响:rage::rage:。

单引号

由于图里引号干扰,实际解析的字符应该是:

# 第一部分
'                                 _oo0oo_
                                 088888880
                                 88" . "88
                                 (| -_- |)
                                  0\ = /0
                               ___/'

# 第二部分
---

# 第三部分
'\___
                             .'

# 第四部分
 \\\\|     |//

问题就出在第四部分:\\\\| |// 没有引号包裹:

echo \\\\|  |//
zsh: parse error near `|'

从反馈看不出是哪个 | 引起的,但命令行标红的是第二个。

而在外面加了双引号后,恰好,双引号之内,没有 $,,` 的干扰,双引号之外没有特殊字符。这样,就可以去掉单引号,而只用双引号包裹。(不去掉单引号,输出的图会带有单引号的)


同样的放入 power shell$profile,则会出现问题:

                                  _oo0oo_
                                 088888880
                                 88
.
88
                                 (| -_- |)
                                  0\ = /0
                               ___/'---'\___
                             .' \\\\|     |// '.
                            / \\\\|||  :  |||// \\
                           /_ ||||| -:- |||||- \\
                          |   | \\\\\\  -  /// |   |
                          | \_|  ''\---/''  |_/ |
                          \  .-\__  '-'  __/-.  /
                        ___'. .'  /--.--\  '. .'___
                     ." '<  '.___\_<|>_/___.' >'  ".
                    | | : '-  \'.;'\ _ /';.'/ - ' : | |
                    \  \ '_.   \_ __\ /__ _/   .-' /  /
                ====='-.____'.___ \_____/___.-'____.-'=====
                                  '=---='

              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                        佛祖保佑    iii    永不死机

其他都好,就是眉心点出现偏移。然后注意到,. 和 88 都换行了,而且前面都有空格,经过测试,88没有空格,会换行,而 . 没有空格,则整个图都不会输出。于是我连同前后各一个空格,将 . 一起用双引号包起来:

                                  _oo0oo_
                                 088888880
                                 88" . "88
                                 (| -_- |)
                                  0\ = /0
                               ___/'---'\___
                             .' \\\\|     |// '.
                            / \\\\|||  :  |||// \\
                           /_ ||||| -:- |||||- \\
                          |   | \\\\\\  -  /// |   |
                          | \_|  ''\---/''  |_/ |
                          \  .-\__  '-'  __/-.  /
                        ___'. .'  /--.--\  '. .'___
                     ." '<  '.___\_<|>_/___.' >'  ".
                    | | : '-  \'.;'\ _ /';.'/ - ' : | |
                    \  \ '_.   \_ __\ /__ _/   .-' /  /
                ====='-.____'.___ \_____/___.-'____.-'=====
                                  '=---='

              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                        佛祖保佑    iii    永不死机

双引号被输出了,不过好像也不影响 😜😜😜

echo "hello".world
# 无输出

echo "hello" .world
hello
.world

echo "hello" ."world"
hello
.
world

echo "hello"" . ""world"
hello" . "world

稍微查了一下,没有查到可以解释的😔😔😔。

richardmyu commented 3 years ago

3.curl 中文乱码

在 PowerShell 配置文件中添加:

$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding

cmd 的也试过,但是没效果。


Using UTF-8 Encoding (CHCP 65001) in Command Prompt / Windows Powershell (Windows 10)