错误:在程序中迷路'\ 302'

时间:2011-03-02 12:46:11

标签: c++ text ubuntu codeblocks

我在Ubuntu 10.10上使用Code :: Blocks。我已连接Mac键盘并将键盘设置设为“Swiss German Mac”。现在每当我写一个等号,然后是一个空格(类似宽度= 100)我得到错误消息错误:stray'\ 302'在程序中。

我知道这个错误意味着文本文件中存在非标准字符。

当我删除空格字符时,程序编译得很好。这意味着Code :: Blocks会添加某种特殊字符。但我不明白为什么会这样。任何人都有一个想法。

'302'代表什么角色?

[UPDATE] 我进一步调查了这个问题。当我使用组合移位+空格时,我得到了这个迷路。现在我知道它不会经常发生。但它仍然相当恼人,特别是在编写代码时......有人知道是否有办法在X11中关闭这个组合?

[解决] 感谢Useless的回答,我能够解决“问题”。它实际上更像是一个功能。 Shift + space默认创建了spacenolinebreak。所以用

更改xmodmap
xmodmap -e "keycode  65 = space space space space space space"

此行为被覆盖,现在一切正常。

谢谢!

8 个答案:

答案 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完成工作!! ??