ソースコード中に0xC2A0(UTF-8のNO-BREAK SPACE)が混ざり実行できなくて困った話

あらすじ

あるソースコードをコピペして実行しようとしたところ、なんか動かない。(正確にはパッチファイルを適用しようとした)

目grep してみたところ、おかしいところはなさげである。

参考サイト

調査

動かないファイルを色々調べてみると以下のようなことがわかった。

  1. ソースコード上の「半角スペースらしき空白」(A) を「半角スペース」(B) (キーボードのスペースキーで出した空白)で検索しても 引っかからない
  2. この (A) と (B) は別ものらしく :s/(A)/(B)/ とかすると置換が実行される
  3. また、 (A) を (B) に置換した状態だとエラーが出ずに実行できるようになった

「半角スペースらしき空白」が半角スペースではない何かのため、実行できなくなっていた模様。

ということで、この「半角スペースらしき空白」を抽出してバイナリエディタで見てみた。

a b c

一応テキトウな文字で挟んでみる。

  • a と b の間 が「半角スペースらしき空白」
  • b と c の間 が「半角スペース」

とした。

見てみると…。

61 C2 A0 62 20 63

61 62 63 はそれぞれ a b c で、 20半角スペース であるというところまではOK。

残ったのは C2A0

文字 備考 文字コード
” “ SPACE (U+0020) 20
—- —————————– —-
a LATIN SMALL LETTER A (U+0061) 61
—- —————————– —-
b LATIN SMALL LETTER B (U+0062) 62
—- —————————– —-
c LATIN SMALL LETTER C (U+0063) 63
—- —————————– —-
” “ NO-BREAK SPACE (U+00A0) c2a0

「半角スペースらしき空白」は NO-BREAK SPACE という文字で htmlで使う   と同じもの。

表示する分には(レイアウトなどに気を付ける必要はあるものの)特に問題はないが、ソースコードの空白としては不適切。

本文の C2A0 を半角スペース 20 に置換してやる事でソースコードはソースコードとしてよみがえる。


ところで、冒頭で「あるソースコード」としたコードだけど、これの出所はEvernoteにストックしておいたものだった。

いったんノートに取り込んでしまうと、Evernote側の仕様でこうなっちゃうのかな?

こういう話もあり↓

ただ、必ずそうなるわけではなく、何かを経由したときだけ変換される?

もうちょい調べてみないといけないな〜。

TODO

vi 、 emacs 、他(sedとか?)でうまく変換できるようにしたい。

関連記事(この記事の初版より古い記事はリンクがグレーで表示されます)

  1. 2013/12/24 [Ruby] RubyでQRコードを生成してみる
  2. 2013/09/07 [Ruby] [Git] [Jekyll] Jekyllバージョンアップの際に思いのほか手こずった話 てっく煮さん製プラグインの更新に追従したい編
  3. 2013/09/03 [Ruby] [Rails] Ruby1.9.3のWebrickで出るCould not determine content-length...エラーを消す方法(2.0.0では解決済)
  4. 2013/08/20 [Ruby] [Rails] [Redmine] Rails3のログ出力にANSIカラーコードを使用しない設定
  5. 2013/08/09 [Ruby] [Redmine] [MySql] [StartUp] WindowsにRedmine2.3をインストールする手順と、プラグイン作成用メモ
  6. 2013/08/07 [Ruby] [Jekyll] [Git] Jekyllバージョンアップの際に思いのほか手こずった話 Jekyll Bootstrapの更新に追従したい編
  7. 2013/05/27 [Jekyll] [Ruby] Jekyll@GitHub Pagesの運用形態を変えたのでAnalyticsの設定が効かなくなっていた
  8. 2013/05/23 [Jekyll] [Liquid] [Ruby] 記事の目次を出力するJekyllプラグインの改良
  9. 2013/04/27 [Ruby] [Chef] [イベント] BPStudy#68に参加しました #bpstudy
  10. 2013/04/11 [Ruby] [Jekyll] Jekyllのバージョンを 0.12.0 にあげた
  11. 2013/04/01 [Ruby] [StartUp] [Chef] 入門Chef Solo - Infrastructure as Code を読みながらChef Soloで遊べるようになるまで
  12. 2013/03/18 [Selenium] [Firefox] [Ruby] Selenium WebDriverでFirefoxがロードできなくなった
  13. 2013/03/07 [Ruby] [Selenium] [iPhone] [IE] [Test] IEとかiPhoneWebView上でSeleniumを走らせる
  14. 2013/03/03 [Ruby] [Evernote] [OAuth] 自作EvernoteスクリプトをOAuth対応する
  15. 2013/02/25 [Ruby] [StartUp] Ruby 2.0.0 をpikとrvm経由でインストール&環境構築