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

时间:2011-05-24 17:59:56

标签: emacs elisp

我无法在Emacs上读到像"D\xC3\xA9cada",Década这样的字符串。显然,它试图找到与\xA9cada,有效十六进制相对应的字符,并且无法找到它,返回以下错误:

ELISP> "D\xC3\xA9cada"
*** Read error ***  Invalid modifier in string

有没有办法限制读者在x之外的前两个字符或常规解决方法中找到修饰符?在这种情况下,替换'\ 251'的'\ xA9'会起作用,但可能不在字符串'\ xA9000'中。

谢谢!


编辑:最后,我不得不更改字符串生成程序以考虑到这一点。每个序列都会附加'\'。在ruby:puts string.gsub(/(\\x[0-9A-F][0-9A-F])([0-9A-Fa-f])/,'\1\\\\ \2')

1 个答案:

答案 0 :(得分:2)

请参阅Emacs Lisp manual

您还可以使用其字符代码表示多字节非ASCII字符:使用十六进制转义符'\ xnnnnnnn',根据需要使用尽可能多的数字。 (多字节非ASCII字符代码都大于256.)任何不是有效十六进制数字的字符都会终止此结构。如果字符串中的下一个字符可以解释为十六进制数字,则写入'\'(反斜杠和空格)以终止十六进制转义 - 例如,'\ x8e0 \'表示一个字符,'a'具有重音符号。字符串常量中的'\'就像反斜杠换行符一样;它不会为字符串提供任何字符,但它会终止前面的十六进制转义。