SATOXのシテオク日記 このページをアンテナに追加 RSSフィード

最近日記一覧(30)

[PRG]Visual Studio Installerにインストール環境条件をつける
[メモ]スマートフォンは5年以内に時代遅れになる?
[間違い]クリミナルガールズ
[間違い]東京ねこなかまさんのサイト
[PRG]全天球動画編集前のファイル仕分けバッチ作ってみた
[間違い]USB3.0リンクケーブル製品ページ
[私信]「言う」と「いう」
[駄文]Windows10アップグレードの抑止方法
[駄文]韓国「盗んだ仏像は取りに来たら返す」
[私信]7/15 Amazon PRIME DAY(プライムデー)に何が起こる?
[私信]カレー味、ゆず味
[メモ]2020年にフォーミュラEはF1を上回る
[PRG]Android+Eclipse+NDKの問題
[F1]2014第13戦イタリア決勝結果
[F1]2014第13戦イタリア予選結果
[ゲーム]ドラクエ無双がPS4で登場
[駄文]はやぶさ2機体公開
[私信]いるいる「24時間テレビは偽善者」と言いたい人
[F1]マックス・フェルスタッペン、ドーナツターン失敗
[F1][動画]フォーミュラ1VSフォーミュラE
[駄文]Seageteが8TB HDDをサンプル出荷
[F1]2014第12戦ベルギー決勝結果
[F1]2014第12戦ベルギー予選結果
[F1]フォーミュラE徹底ガイド観た
[F1]アンドレ・ロッテラーはケータハムに身を置くつもりはない模様
[F1]小林可夢偉、ケータハムのシートを失う
[F1]フォーミュラE最終テストタイム
[F1]佐藤公哉、Auto GPでシリーズチャンピオン獲得
[動画]アザラシとサーフィン
[駄文]ハイスコアガール著作権問題

最新トラックバック一覧

最新コメント一覧

1. 10/05 nor
2. 10/05 鉄板
3. 01/08 やまさん
4. 01/08 やまさん
5. 10/05 まぁぶぅ
6. 09/29 かわむら
7. 06/27 satox
8. 06/27 chap-chap3
9. 07/22 satox
10. 07/22 よこたん

SATOXのむにむにアンテナ

最近の言及URL

シテオクカウンタグラフ

satoxのシテオクカウンタ

一生どうでしょうします!

連絡先アドレス

文句、苦情、愛の告白、
日常の愚痴、応援のお便り、
週報送り先などは以下の通り。

その他

■QRコード(URL):
SATOXのシテオク日記 for mobile
SATOXのシテオク日記は、携帯向けに最適化された内容で閲覧することができますぞ。

将来は猫になりたいSATOX(さとっくす)ことダメな人が、シテオクな日記を綴ったり綴らなかったり。
F1伊集院光水曜どうでしょう猫好きぷに絵描き。お仕事はゲーム関連のプログラマやってます。
follow us in feedly My Yahoo!に追加 Subscribe with livedoor Reader Bloglinesで閲読登録

2015-07-23(Thu)

smilecat

[]Windows10アップグレードの抑止方法

Windows10、評価版をいらないPCにインストールして遊んでみていたりしますが、なかなか出来が良くて楽しみ。Xboxサービスとの統合などいろいろ意欲的なOSとなっています。

その反面、メインPCや仕事で使っているPCに勝手にインストールされて、必要なソフトが動かなくなったら困ります。

というわけで、Windows10アップグレードの抑止方法記事がありましたのでご紹介。

■Windows Update からの Windows 10 への無償アップグレードを抑止する方法

 

KB3065987インストール

簡単に方法を説明すると、通常、インストールされているというKB3065987がインストールされているか確認。入ってなければインストール。

https://support.microsoft.com/en-us/kb/3065987

 

管理者権限で下記コマンドを実行

reg add HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate /v

"DisableOSUpgrade" /t REG_DWORD /d 00000001 /f

具体的にはスタートメニューの「コマンドプロンプト」を右クリックし、「管理者として実行...」。コマンドをコピペして実行します。

 

または、

管理ツール→グループポリシーの編集

[コンピューターの構成] -- [管理用テンプレート] -- [Windows コンポーネント] -- [Windows Update]

-- [Turn off the upgrade to latest version of Windows Update] 値を「有効」に

 

以上だそうです。

 

本当にこの操作で抑止できるのすら心配ですけどもね…。

レジストリ変更コマンドを実行してもグループポリシーの設定は変更されてなかったので、グループポリシーで編集するのが確実なような気がします。

 

2014-05-20(Tue)

びくっ

[]サロゲートペアと日本語文字揃え問題

C#(.NET)の関数では基本Unicodeで文字を扱うことになるわけですが、サロゲートペアにも対応しています。……なんて得意げに語りましたが、あまりよく知りませんでした。

サロゲートペア、すなわち、基本16ビットの文字コードなのですが16ビット×2を使って1文字を表すというもの。

JISの第3水準以上の文字などにもがっつりと対応しようと思うと、サロゲートペア問題がにょきっとでてきてじわりと問題になります。

でも、「サロゲートペア」なんていうなんだか怪しげなお話よりも、「C#と日本語文字揃え」単純な観点で問題があるんです。

 

文字幅、簡単に揃えられない問題

等幅ピッチフォントを扱い、タブ文字も当てにならないという前提のDOSコマンドプロンプト画面で、リストを表示したいと思います。

例えば、以下のような感じ。通し番号、任意の文字列、数字、こんな表示。

■は"𠮟"という漢字

String[] list = { "test", "IsSurrogate", "本日test", "■るtest" };
Int32 count = 0;
foreach (String str in list) {
    Console.WriteLine(String.Format("{0,4} {1,-20} {2:0000}", count++, str, str.Length));
}

フォーマットの「-20」は20文字の左揃え指定ですが、きれいに表示されると思いますか?

こうなります。

右側の数字がずれちゃう。

出力
   0 test                 0004
   1 IsSurrogate          0011
   2 本日test               0006
   3 ■るtest              0007

英語圏のヒトはこれだから困ります。

「𠮟」という文字はフォントがない場合「??」と表示されます。

半角1文字、全角2文字という計算が出来れば良いのですが、結果漢字は1文字「本日」と「𠮟る」もString.Lengthの結果が異なるという結果になりました。

「𠮟」はChar×2のサロゲートペアの文字なんです。

 

サロゲート文字の判別

Char.IsSurrogateでサロゲートチェック。

■は"𡋤"という漢字

static void check(String s)
{
    Console.WriteLine(s + " String.Length = " + s.Length);
    foreach (Char c in s) {
        Console.WriteLine(String.Format("\t0x{0} IsSurrogate={1}", Convert.ToString(c, 16), 
			Char.IsSurrogate(c).ToString()));
    }
}

check("A");
check("あ");
check("漢");
check("■"); // Unicode 0x212E4 '■'

出力は以下の通り。

出力
A String.Length = 1
        0x41 IsSurrogate=False
あ String.Length = 1
        0x3042 IsSurrogate=False
漢 String.Length = 1
        0x6f22 IsSurrogate=False
■ String.Length = 2
        0xd844 IsSurrogate=True
        0xdee4 IsSurrogate=True

Char.IsSurrogate関数でサロゲート文字を判断できるというわけです。

Char.IsHighSurrogate関数でHigh側、Char.IsLowSurrogate関数でLow側かどうかを確認できます。

 

文字を揃えるよ

というわけで、サロゲートペアの問題を踏まえて文字を揃えるプログラムです。後述も読んでね。

public static Int32 GetStringWidth(String s)
{
    Int32 count = 0;
    
    foreach (Char c in s) {
        if (Char.IsSurrogate(c) == true) {
            if (Char.IsHighSurrogate(c) == true) {
                continue; // ハイサロゲートは文字幅として無視
            }
        }
        if (c <= 0xff) {
            count += 1; // 半角(エスケープ文字も含む)
            continue;
        }
        count += 2; // 全角
    }

    return count;
}

Int32 count = 0;
foreach (String str in list) {
    String fname = str + new String(' ', 20 - GetStringWidth(str));
    Console.WriteLine(String.Format("{0,4} {1} {2:0000}", count++, fname, GetStringWidth(str)));
}

GetStringWidthという文字幅を返す関数を作り、文字幅を調節するようにしました。

■は"𠮟"という漢字

出力
   0 test                 0004
   1 IsSurrogate          0011
   2 本日test             0008
   3 ■るtest             0008

やった、できた。

オチとしては、以下のようにするとGetStringWidth関数はシンプルになります。

public static Int32 GetStringWidth(String s)
{
    Byte[] bytes = Encoding.GetEncoding("Shift_JIS").GetBytes(s);
    return bytes.Length;
}

そう、シフトJISにすれば、全角は2バイト、それ以外は1バイトなのでそのバイト列の長さが文字幅となるのです。

つまるところ、StringをCharとして扱う場合にはサロゲートペア文字もあるので注意しないといけないよ、というお話でした。

200403040506070809101112
2005010203040506070809101112
2006010203040506070809101112
2007010203040506070809101112
2008010203040506070809101112
2009010203040506070809101112
2010010203040506070809101112
2011010203040506070809101112
2012010203040506070809101112
2013010203040506070809101112
2014010203040506070809
201503060708091012
201601

  • satox2016-01-20
  • あっぷ
  • ぬも
  • miteru
  • みてる
  • ピックアップ
  • おばちゃん
  • smilecat
  • ぎょ
  • ぺろりん
  • みる
  • みてる
  • satox2015-03-25
  • 吸う
  • だるい
  • ねこだまり
  • <●><●>
  • 夜景
  • ふいふい
  • gyo
  • ごあいさつ
  • ずるーん
  • すくっ
  • 男爵
  • ぬぬ
  • 胸を借りる
  • ぞうしょく
  • マッシュルーム
  • hirune
  • 寝る子=猫
  • じゆう
  • ねこよけない
  • miteru
  • 涼しい
  • 呼んだ?
  • 群れ
  • おもいかね
  • いっそ飲んでくれ
  • 見つかった!
  • ゆびさしかくにん
  • 対峙
  • だらあん
  • 真ん中分け
  • ベテランの守備
  • 開眼
  • みざる
  • パパラッチ
  • kinenn
  • ずぶぬれ
  • ねこ
  • ねこだまり
  • みてる
  • Twitterに投稿
  • きょうだい
  • ぐーすか
  • だらしないねこ
  • 花占い
  • 店番
  • ちっさいわー
  • 骨肉の
  • めっ
  • キャンプだほい
  • 先客が
    (c) 2004-2014 SATOX All Rights Reserved.