特定の文字を入力するとVisual Studioがお怒りになる件(未解決)
Visual Studio で日本語を入力すると「アクションが完了できませんでした。」と怒られたりする。: 国民宿舎はらぺこ 大浴場が気になったのでちょっと調べてみた。普段はEclipse使いでありVSは高機能なIEデバッガとしか使わないのであまり影響が無かったりするけども。
現象確認
仕事用PCのWindowsXP sp2でVisual Studio 2008 Professionalという組み合わせにて、新規WebSiteを作成しJScriptソースを追加。適当に「時刻」など入力してみる。
以下のように適当に入力してみた。「時刻」とIMEから変換を確定した瞬間にエラーダイアログ(「アクションを完了できませんでした。」)が出るときは出るのだが、出たり出なかったりする。
var a = "時刻は刻一刻と変わっていきます。文字列中だと平気なのね。"; // 時刻ってどうして刻一刻と過ぎ去ってしまうのでしょうか。エラーでまくり。 /* コメントの中じゃないと時刻もエラーにならない? 刻一刻と状況が変わる? */ // Cスタイルのコメントならエラーにならないのかも?時刻でも。 var jikoku = "医者時刻";
文字列値中やCスタイルのコメントの中ではエラーが起きず、行末コメント(//)で発動するようだ。少ししか試していないので確かではありませんが。
ところで、この現象……
何だか「表(0x5C)文字化け」問題に似てると思いません?まさかとは思うが入力の文字の2バイト目を何か特殊な意味に使ってないだろうなー?
「刻」はUTF-8で"0xE5 0x88 0xBB"ですがそういえばWindowsは内部ではUnicode(UTF-16?)だっけなーと思ったので0x523Bを採用。後ろの3Bがアヤシイ。
0x○○3Bな文字は……テキトーにHTMLファイル書いて調べてみる。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>0xXX3b characters</title> </head> <body onload="show()"> <div> <script type="text/javascript"> var str = ""; for(var i=0x00; i<=0xff; i++) { str = "&#x" + ((i & 0x10) ? i.toString(16): "0" + i.toString(16)) + "3B;"; document.write(str); } </script> </div> </body> </html>
こういうスクリプトをさらっと書ける大人になりたい。(苦戦した。)
結果はこう。表示できない範囲は削ってます。
;л※┻?主儻刻医吻圻尻戻攻繡活爻画瘻稻縻耻蜻蠻褻註輻錻阻迤頻鬻鰻鴻鼻[
よく使う文字として「主刻医吻尻戻攻活画蜻註輻阻鰻鼻」あたりでしょうか。これら文字を行末コメント中にIMEから入力しようとすると見事にアラートの嵐。
// 主刻医吻尻戻攻活画蜻註輻阻鰻鼻 (コピペで入力は問題ない) // 主人は刻一刻と医者に口吻と尻を戻しながら攻撃され活き活きと絵画のような蜻蛉(註:どんな例文だ)輻輳阻害鰻鼻
というわけで解決策
- 行末コメント入力時には頑張って上記ダメ文字を避ける。
- 行末コメントをあきらめ、Cスタイルのコメントしか使わない。
- コメントは英語で書く。
- Visual Studioを窓から投げ捨てる。
本質的な解決になってません。
(追記)「主人はお尻が好き」で発見したのだけど(爆
「好」って字も発動するなぁ。ダメ文字はまだまだあるのかも。眠いので今日はここまで。