我在Ubuntu 10.10上使用Code :: Blocks。我已连接Mac键盘并将键盘设置设为“Swiss German Mac”。现在每当我写一个等号,然后是一个空格(类似宽度= 100)我得到错误消息错误:stray'\ 302'在程序中。
我知道这个错误意味着文本文件中存在非标准字符。
当我删除空格字符时,程序编译得很好。这意味着Code :: Blocks会添加某种特殊字符。但我不明白为什么会这样。任何人都有一个想法。
'302'代表什么角色?
[UPDATE] 我进一步调查了这个问题。当我使用组合移位+空格时,我得到了这个迷路。现在我知道它不会经常发生。但它仍然相当恼人,特别是在编写代码时......有人知道是否有办法在X11中关闭这个组合?
[解决] 感谢Useless的回答,我能够解决“问题”。它实际上更像是一个功能。 Shift + space默认创建了spacenolinebreak。所以用
更改xmodmapxmodmap -e "keycode 65 = space space space space space space"
此行为被覆盖,现在一切正常。
谢谢!
答案 0 :(得分:7)
\ 302代表编译器遇到的字节值的八进制表示。它转换为二进制的11000010,这让我觉得它是两个字节的utf-8序列的开始。那么这个序列必须是:
11000010 10??????
编码二进制unicode点10 ??????,可以是从U + 80到U + BF的任何东西。
从U + 80开始的几个字符是特殊空格和符号,通常不会在文本编辑器中显示。
可能不是你的编辑器而是Xorg,由于你的键盘设置,它会发出这些字符。尝试切换到通用美国键盘并测试问题是否仍然存在。
答案 1 :(得分:7)
由于你确定它是由shift+space
命中引起的,你可以检查X本身在做什么。首先,从命令行运行xev
,点击shift+space
并检查输出。例如,我看到:
$ xev
KeyPress event, serial 29, synthetic NO, window 0x2000001,
root 0x3a, subw 0x0, time 4114211795, (-576,-249), root:(414,593),
state 0x0, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 29, synthetic NO, window 0x2000001,
root 0x3a, subw 0x0, time 4114213059, (-576,-249), root:(414,593),
state 0x1, keycode 65 (keysym 0x20, space), same_screen YES,
XLookupString gives 1 bytes: (20) " "
XmbLookupString gives 1 bytes: (20) " "
XFilterEvent returns: False
...
然后,运行xmodmap -pk
并查找键码(空格应为65,如上所示,但检查您的xev输出)。
如果你看到像
65 0x0020 (space)
然后X没有这样做。另一方面,如果我选择shift
修改 的字符键,我会看到类似这样的内容:
58 0x006d (m) 0x004d (M)
如果您的密钥代码有两个或更多密钥,则X是罪魁祸首。在这种情况下,像xmodmap -e 'keycode 65 space'
这样的东西应该有效。
答案 2 :(得分:0)
这听起来像某种编码问题。我多年没有使用code :: blocks,所以不确定它是否允许你选择不同的编码。如何用gedit打开代码文件并将其保存为UTF-8,然后再试一次?但是,使用空格字符会出现这样的问题,这听起来很奇怪。
答案 3 :(得分:0)
'\302'
是八进制数302 8 的C表示法,等于C2 16 和194 10 。所以它不是ASCII。
它映射到哪个字符取决于编码。例如,在Latin-1中,它是Â字符。
答案 4 :(得分:0)
从网页或其他电子文档复制和粘贴时,我看到过这种类型的问题。常见的罪魁祸首是无效的引用,如“而不是”,或类似的东西。尝试使用编译器错误来引导您进入错误文件中的位置。
答案 5 :(得分:0)
我在使用芬兰语键盘的linux盒子里看到过这个问题。 emacs等也会发生这种情况。我没有很好的解决方案,但猜测它在其他地方发生的事实也很有用......
答案 6 :(得分:0)
如果您在Emacs中打开文件并将set-buffer-file-coding-system打开为“unix”或某些ascii变种,那么当您尝试保存时,它会警告您缓冲区包含不可表示的字符和指向他们,以便你可以解决它们。
答案 7 :(得分:0)
我通过修改us-ascii示例文件遇到了同样的问题。 所以我在utf-8中转换它,这里是gnu / linux命令:
iconv -c -t us-ascii -f utf-8 source_file -o dest_file
然后添加我的修改......没有更多错误! 要验证初始编码,请使用
file -i source_file
我应该添加一个非ascii字符以允许iconv完成工作!! ??