dig命令管道/重定向输出时变音字符行为异常问题求助
解决dig命令在管道/重定向环境中处理变音字符异常的问题
dig命令在直接终端执行和通过管道/重定向输出时,处理含变音字符的域名(比如münchen.de)会出现行为差异:
直接终端执行的正常输出
jump@serv:~$ dig münchen.de ; <<>> DiG 9.18.28-0ubuntu0.20.04.1-Ubuntu <<>> münchen.de [...] ;; QUESTION SECTION: ;münchen.de. IN A ;; ANSWER SECTION: münchen.de. 3600 IN A 194.246.148.58 [...]
管道/重定向时的异常输出
jump@serv:~$ dig münchen.de | cat ; <<>> DiG 9.18.28-0ubuntu0.20.04.1-Ubuntu <<>> münchen.de [...] ;; QUESTION SECTION: ;m\195\188nchen.de. IN A [no answer section]
问题原因
dig会自动检测输出目标是否为终端(TTY):
- 输出到终端时,会正常显示Unicode变音字符,并正确查询对应的IDN域名
- 输出到管道或文件时,会将变音字符转义为ASCII编码(比如
ü转成\195\188),同时实际查询的是转义后的字符串,导致无法匹配到正确的域名记录
解决方法
有两种简单方式让dig在管道/重定向环境下保持和终端一致的行为:
- 强制dig使用终端模式输出
使用-tty参数,让dig认为输出目标是终端,从而保留Unicode字符的正常显示和正确查询:
dig -tty münchen.de | cat # 重定向到文件同理 dig -tty münchen.de > output.txt
- 关闭IDN输出转义
使用+noidnout参数,禁止dig将IDN域名转义为ASCII格式:
dig +noidnout münchen.de | cat # 重定向到文件同理 dig +noidnout münchen.de > output.txt
执行上述任一命令后,QUESTION段会正确显示münchen.de,同时能正常获取ANSWER段的解析结果,和直接终端执行的行为完全一致。
内容的提问来源于stack exchange,提问作者Tivoli
相关产品推荐
相关产品推荐

