uoz 作業日記

様々な作業の記録を共有するブログです。

"Unrecognized escape sequence"でAzureデプロイ失敗

こういう時は@をつけよう

Azureにアプリをデプロイすると、

 Models\xxxxx.cs(nnn,nn): error CS1009: Unrecognized escape sequence [D:\home\site\repository\xxxxxxxxx.csproj]
Failed exitCode=1, command="D:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe 
以下略...


みたいに言われて失敗するようになった。

メッセージから察するに当該行にエスケープシーケンスがあるはずだけど、そんなの無い。
"\"があるのかな?無い。


Stackoverflowを見ると、とりあえず文字列の前に@をつけたらいいらしい。

http://stackoverflow.com/questions/16225861/c-sharp-unrecognized-escape-sequence

でもダメだった。
というか、本当はその対処であってた。
しかし文字列のうち、意味ないところに@をつけてたので、意味がなかった。


実は本当につけないといけないのは、全然怪しくない普通の文字列「申請中」ってとこだったのだが、なんとなくスルーしてた。
しかし、この申請中の「」という文字は、ダメ文字というものにあたるらしい。


ダメ文字一覧表 - fudist

2バイト文字の2バイト目だけみると、「\」と同じになっている。だから、日本語とかわからないAzureの中のチェック機構はエスケープシーケンスがあると思ってしまうらしい。


だから、この「申」とか他にもこのリストにある文字を使ってたら@をつけてエスケープシーケンスを無効にしないとダメですよ。
これでデプロイに成功。

もう一つのワナ~ソースコード文字コードが勝手にsjis

と思ったら、今度は@をつけたところだけ、文字列が文字化けして表示される。
かなりハマった。

結論から言うと、プロジェクト中の他のファイルはUTF-8なのに、当該のソースコードのファイルの文字コードだけ、SJISになってた。

どういうきっかけなのか分からないが、そうなってしまったらしい。
文字コードUTF-8に直したら文字化けも治った。

これはBitbucketのgitにソースをあげてチェックしたときに、そのファイルだけ文字化けしていたから気づいた。

以上。