2020年09月29日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 1044 count

【入門級】文字は必ず幅を持っているわけではない

Written By: 川俣 晶連絡先

結果が異なる §

 サンプルソースをVisual Studioでデバッグ実行するとコンソールには"A?B"と出力されますが、Visual Studioの出力ウィンドウにはABと出て来て一致しません。

 疑問は2つです。

  • コンソールでなぜ2文字目は?に化けるのか?
  • 出力ウィンドウでなぜ2文字目は消えてしまうのか?
  • そもそも2文字目の'\u200B'は何を書いているのか

問いの答え §

 第1の問いの答は【デフォルトのコンソールはシフトJIS(CP932)で動いているため、シフトJISにない文字は全て?になるから】です。

 第2の問いの答は、2文字目がzero width spaceという幅がゼロの空白文字だからです。この文字には幅がありませんので、書き込まれていても存在しないように見えます。

 第3の問いの答は、【C#に存在するUnicodeの文字コードを直接表記する書式でzero width spaceのコードU+200Bを直接書いた】です。\uに続いて文字コードの16進値を書きます。

罠の数々 §

  • ソースを入力する手段で、扱えない文字、見えない文字は16進数の番号指定で書き込んでしまう。この方法を使えば、かな漢字変換機能を持っていない英語環境で日本語文字も簡単にソースに埋め込める。(ただし文字の番号を調べる手間はかかる)
  • Unicodeで面倒くさいのはサロゲートペアだけだと思うと痛い目を見る。zero width spaceが挿入されているせいで、見た目と実際の文字列の長さが違うケースもあり得る (他にもあるぞ)
  • zero width spaceは、文字としては隣接しているが単語の区切りになる箇所を示す等の目的で使われるが、希に表現のトリックにも使用される。注意しよう

参考リンク §

文字列 (C# プログラミング ガイド)

 上記ページの【文字列のエスケープ シーケンス】に\uを始めとする\を前置する表記の一覧がある。他にとんな表記があるか確認しておこう。特に、4桁を超える番号を持つ表記を記述する方法は顔文字を埋め込む際には使用される可能性がある。要チェックだ。

リポジトリ §

https://github.com/autumn009/cshowto

ZWSP §

using System;

using System.Diagnostics;

class Program

{

    static void Main()

    {

        char[] ar = { 'A', '\u200B', 'B' };

        string s = new string(ar);

        Console.WriteLine(s);

        Debug.WriteLine(s);

    }

}

実行結果 (コンソール)

A?B

実行結果 (Visual Studioの出力ウィンドウ)

A​B

Facebook

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
09月
30日
【入門級】セで始まりスで終わる文字列を判別する
3days 0 count
total 1041 count
【C# コーディング How To】の前のコンテンツ
2020年
09月
28日
【入門級】文字列の中の1文字は読み出せるのに書き換えられない
3days 0 count
total 988 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20200929094230
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.