Vista日記

Surrogate Pair in Vista VS My program (T T)

1 Mins read

Vistaが登場してから何かと文字コードの拡張にともなう影響が声高々と謳われているが、
「何がそんなにもんだいなんじゃい!」ってVistaでMy Programを動かしてたら・・・・

あれれ???「この文字バックスペースすると文字化けする・・・□に・・どうなってんじゃい!!!」

およそ10分Webサーフィン♪

!:evil:!サロゲートペア???で問題発生!?

簡単にまとめると・・・

1.サロゲートペアとはUTF16では本来2バイト(16bit)で1文字を表現しているが、65,536バイトでは表現できない文字があらわれた(中国、インド、日本などアルファベット圏外字を扱うため)ために16bit+16bit(前半0xD800~0xDBFF, 後半0xDC00~0xDFFF)を使用して16bitで表現できない文字をこの領域に入れる方法をサロゲートペアと言う。詳しくはここ
サロゲートペア自体は昔から存在する。
 
2.近年のOS内部処理ではUnicodeのUTF16によって文字制御している。
 
3.XPまでの日本語標準フォントにはサロゲートペアが存在しなかった為、UTF16は2バイトのみと判断する場合がほとんどに。(これも問題だが・・・デファクトスタンダードされた)
 
4.Vistaに搭載された日本語標準フォントにはサロゲートペアが存在する。
 
5.サロゲートペアの文字は見た目は1文字だが、プログラミング上のLengthが2(4バイト)で帰ってくる!!!(もちろん実際に内部では4バイト=32bitを使用しているのだから・・・)
 
6.今まで文字をカウントしている関数が信用ならない。C#のcharにサロゲートペア入れて試しにLengthみると2!?本来なら1がほしい
 
7.サロゲートペアをTextBoxなどに入れてbackspaceすると下位サロゲートだけ消えて上位サロゲートが残るため文字化け(□など)が起こる。なので2回押して1文字消す???

こんな感じになる・・・・:evil:!!!

Vistaの文字コード問題はこればかりじゃないが、これが一番影響範囲大でしょう!

PGとして考えられる影響範囲

1.SQL等、検索はどうなの?
2.正規表現は?
3.文字をカウントしている関数は?
4.バイト制限しているコントロールは?
5.left、raightrightなど関数は?

少し考えただけで頭が痛くなる・・・どうすんの!オレ!?つづく(笑)ってな場合じゃない!

この仕様きめたお偉いさん方はOS環境やPGのことなど理解してないでしょう!
しかし、これは2000年問題よりも事は重大だと思うよ・・・まじで:mad:

最後に、今まで表記が間違っていた文字や文字コードとして無かった文字が新たに追加されるのは
歓迎されるべきだが、追加の方法が今の時点で尚且つサロゲートペアとして追加するべきだったのか?
かなり疑問に感じる。

関連リンク
・C#など.NETでの対応方法
・MS製品JIS2004対応表
・文字化けとは
・Vista変更文字1
・Vista変更文字2
・総まとめ情報

Related posts
日記

Swagger EditerをDockerでローカル起動

1 Mins read

swagger

API開発で設計したDocment管理として使用できサンプルコードとしてJSONにしてくれて、よしなにPostmanみたいな動きしてくれるやつ

最近現場で使っているところが増えてる

ローカルでサーバー起動(例は3つ、外部APIサーバーが3つある場合などなど)

docker pull swaggerapi/swagger-editor
docker run -d -p 8090:8080 swaggerapi/swagger-editor
docker run -d -p 8091:8080 swaggerapi/swagger-editor
docker run -d -p 8092:8080 swaggerapi/swagger-editor

http://localhost:8090 などをブラウザで開き

ソース管理と一緒にリポジトリ内などにあるyamlファイル内容をコピペでブラウザ左Windowへ貼り付け

get、postなどテストをおこなう

※APIなので多少仕様の理解が必要となる

よく一緒に使われるのが OpenAPI

こちらはAPI設計ファイルとなったyamlファイルを読み込ませることにより指定した言語としてI/O部分のソースコードを自動でジェネレートしてくれるツール、ただし良いところばかりではなく、間違ったソースもジェネレートしてくるから地雷除去が必要な場面に出くわすこと多い

 

 

日記

AlmaLinux 8 GPG キー変更の準備をする

1 Mins read

dnfコマンドでエラー

dnf update

AlmaLinux 8 - BaseOS 485 kB/s | 3.4 kB 00:00 
GPG 鍵 0xC21AD6EA をインポート中: 
Userid : "AlmaLinux <packager@almalinux.org>" 
Fingerprint: E53C F5EF 91CE B0AD 1812 ECB8 51D6 647E C21A D6EA 
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux 
これでよろしいですか? [y/N]: y 
鍵のインポートに成功しました 
鍵をインポートしても役に立ちませんでした。鍵が間違っていませんか?

キーが新しくなった

AlmaLinux 8 GPG キーの変更

2024 年 1 月 12 日に、更新された GPG キーを使用して AlmaLinux 8 の RPM パッケージとリポデータへの署名を開始します。以下の手順を実行すると、切り替え後も引き続き問題なくアップデートを受信できるようになります。

システムに新しい AlmaLinux 8 GPG キーが既に含まれており、それを信頼していることを確認したい場合は、それをインポートするだけです。

sudo rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux
日記

MongoDB、Mongo Expressの環境をDockerで立ち上げる(docker-compose)

1 Mins read

ブラウザから

http://localhost:8081

ME_CONFIG_MONGODB_ADMINUSERNAME: root 
ME_CONFIG_MONGODB_ADMINPASSWORD: password

で指定したID,Passをブラウザへ入れてもログインできない?はて?

ブラウザのBasic認証用ID,Passの環境変数追加設定が必要だったらしい

ME_CONFIG_BASICAUTH_USERNAME: admin
ME_CONFIG_BASICAUTH_PASSWORD: password

「docker-compose.yml」ファイル作成(下のコード)
「docker-compose up -d」コマンドをターミナルで実行


version: '3.1'

services:

  mongo:
    container_name: mongo-dev
    image: mongo
    restart: always
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: password
    volumes:
      - ./configdb:/data/configdb
      - mongoDataStore:/data/db

  mongo-express:
    container_name: mongo-express
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: password
      ME_CONFIG_MONGODB_URL: mongodb://root:password@mongo:27017/
      ME_CONFIG_BASICAUTH_USERNAME: admin
      ME_CONFIG_BASICAUTH_PASSWORD: password

volumes:
  mongoDataStore:
    driver: local

Mac ターミナルからも接続確認(testDBはexpressからなどcreateしておくこと)

mongosh "mongodb://root:password@localhost:27017/testDB?authSource=admin"

Current Mongosh Log ID: 65be609e7384r68762b10b0
チームを強化する

サービスの
サブスクリプションの利点を説明するテキストを追加します。

2 Comments

Comments are closed.