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