Ruby未遵循# encoding编码规范:指定binary却输出UTF-8?
问题原因及解决办法
- 核心问题是编码注释的位置错误:Ruby规定,文件编码声明(比如
# encoding: binary)必须放在脚本的前两行范围内——如果第一行是shebang(#!/usr/bin/env ruby),编码注释必须紧跟其后作为第二行,中间不能有空行。你的脚本里shebang之后空了一行,第三行才写编码声明,Ruby会直接忽略这个注释,导致声明不生效。 - 当编码声明不生效时,Ruby会使用系统默认的外部编码(多数环境下是UTF-8)来解析脚本中的字符串字面量,所以
puts s.encoding输出的是UTF-8。
修正后的脚本
#!/usr/bin/env ruby # encoding: binary s = "\xe1\xe7\xe6\x07\x00\x01\x00" puts s.encoding
运行修正后的脚本,就能得到预期的ASCII-8BIT(binary编码的别名)输出。
内容的提问来源于stack exchange,提问作者Keith Bennett
相关产品推荐
相关产品推荐

