我在编译之前正在对源代码进行预处理。我需要将任何非ascii字符转换为转义的十进制等值。例如:
fun main () = print "한"; ()
必须转换成:
fun main () = print "\237\149\156"
这应该很简单,但我似乎无法弄明白。一些类似的问题建议使用iconv
但似乎是编码已经转义的字符串。
重申一下,我试图使用bash命令预处理一些源代码,将所有非ascii(utf-8编码)字符转换为它们的转义十进制等效值。任何指针都会很棒!
答案 0 :(得分:2)
这是使用Perl的方法:
perl -wpe 's/([^\x00-\x7F])/sprintf "\\%03d", ord $1/eg' < input > output
一些不太明显的位的解释:
/e
标志表示将替换字符串(在本例中为sprintf "\\%03d", ord $1
)视为Perl代码,并使用其结果。ord
接受一个字符(在本例中为单个字节)并返回其数值。sprintf
接受格式字符串和一系列值,并返回由format-string组成的字符串,其值已被适当替换。 %03d
表示&#34;十进制整数,零填充到三位&#34;。