tmytのらくがき

個人の日記レベルです

Tileに@をプッシュしたら化けた

PushNotificationでタイルを更新できるんだけども、@から始まる文字列を投げつけると化ける。化けるというより、なんかへんてこな文字列が表示される。

おいバグじゃねーの!と思ってフォーラムに突撃してみたら、中の人からこんな答えが。

それ@から始まるのはリソース探しに行ってるからだと思う!
回避の仕方ここに書いてあるから参考にしてね!(超意訳)
http://blogs.msdn.com/b/ptorr/archive/2011/07/12/background-agents-part-3-of-3.aspx

要するに@から始まるのはリソースを探しに行ってしまうから@以外からはじまるようにすればいいよ!とのこと。
で、回避の方法はZeroWidthSpaceを先頭に入れればいいよ!っていうなんとも運用で回避的な方法…

コードだとこんな感じだそうです。

/// <summary>
/// ゼロ幅スペース。@のエスケープする用。
/// </summary>
const char ZWSP = (char)8203;

// 先頭が@から始まるなら0幅スペースを追加する
string backText = tileData.BackText;
if (backText.StartsWith("@"))
  backText = ZWSP + backText;