如何读取带有问题修饰符的字符串?

问题描述

| 我无法在Emacs上读取诸如é0ѭ,Década之类的字符串。显然,它尝试找到与
\\xA9cada
对应的字符(有效的十六进制),但未能找到它,并返回以下错误
ELISP> \"D\\xC3\\xA9cada\"
*** Read error ***  Invalid modifier in string
有什么方法可以限制读者在x之外的前两个字符中找到修饰符,或者是一般的解决方法在这种情况下,将\'\\ xA9 \'替换为\'\\ 251 \'可能有效,但可能无法在字符串\'\\ xA9000 \'中使用。 谢谢! 编辑:最后,我不得不更改字符串生成程序以考虑到这一点。每个序列都将附加\'\\ \'。红宝石:
puts string.gsub(/(\\\\x[0-9A-F][0-9A-F])([0-9A-Fa-f])/,\'\\1\\\\\\\\ \\2\')
    

解决方法

请参阅Emacs Lisp手册: 您还可以使用字符代码来表示多字节非ASCII字符:使用十六进制转义符“ \\ xnnnnnnn”,并根据需要使用任意多个数字。 (多字节非ASCII字符代码均大于256。)任何不是有效十六进制数字的字符都将终止此构造。如果字符串中的下一个字符可以解释为十六进制数字,请写'\\'(反斜杠和空格)以终止十六进制转义-例如,'\\ x8e0 \\'代表一个字符,带有坟墓的'a'口音。字符串常量中的“ \\”就像反斜杠换行符;它不会为字符串贡献任何字符,但会终止先前的十六进制转义。