「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@711) [低] [未処理]
@711■ (#2241) Uグリッドにて一部文字がSJIS表示に化ける - TD (2013-12-26 09:00) /低 未処理
【症状】
Uグリッドにおいて、一部の特定文字が混在している場合にSJISでデコードされてしまう

SJISの範疇で総当りで確認してみたところ、具体的には

´¨±×÷°§¶
ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ
αβγδεζηθικλμνξοπρστυφχψω
АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
абвгдеёжзийклмнопрстуфхцчшщъыьэюя

以上の文字がセル内に混在している場合に、文字列がSJISでデコードされて文字化け表示されます。
他のUTF8対応GUI部品ではそのような現象は確認されませんでした。

【再現方法】
UグリッドテストとはUグリッド
Uグリッドテストのアイテムは「あ,い,う
てすとα,テストβ,Testγ」

これを実行すると

あ      い      う
縺ヲ縺吶→ホア 繝・せ繝夷イ Testホウ

と表示されてしまう。

【要望】
正常に表示されるように。

【バージョン】
1.539

【その他】
Win8.1で確認しました。

(#2242) Re: グリッドにて一部文字がSJIS表示に化ける - うぇいく (2013-12-27 02:29) /低 未処理
 現象を確認してみました。
 確かに問題の文字が含まれているときだけ化けるっぽいですね。
 そこで、文字のコードを調べてみたところ、これらの文字は、UTF8で2bytesのコードという共通点があるようです(UTF16だと、$0080~$007f?。かなカナ漢字などの日本語の文字の大半はUTF8では3bytes)
 なにか、アイテムをUTF8で設定しようとした際のロジックがおかしいような部分は見つけた(今回の件とは別)のですが、特定の文字で化ける点はわかりませんでした。
とりあえず、U部品中でグリッドだけというあたりをヒントにもうちょっと調べてみます。

(#2243) Re: グリッドにて一部文字がSJIS表示に化ける - うぇいく (2013-12-27 22:20) /低 未処理
 utf8文字列かどうかを判定している部分を直して試してみると、別件ではなくあたりのようでした(Unicode部品は、ShiftJISかUTF8の文字列を自動判定して受け取ります)。
 現在、バグによりどんな文字列でも、ほぼ確実に「UTF8ではない」と判定されるため、Unicode部品の引数はShift_JISの文字列を渡すと安定して動作していますが、バグを修正した場合、UTF8としてもShift_JISとしてもどちらとしても受け取れる文字列はUTF8として処理されるようになります。
 そのため、御認識されずに設定するには、常にUTF8で渡すことが必要になる点が、少し気になります。
(御認識される例としては、Shift_JISの半角カナで「ハイ」と書くと、UTF-8の2バイト文字としても正しい文字になる)

(#2244) Re: グリッドにて一部文字がSJIS表示に化ける - TD (2013-12-28 04:16) /低 未処理
お疲れ様です。UTF8とSJISの自動判別のバグだということは把握しました。

なでしこの整形処理でUTF8に変換した場合、$EFBBBF というヘッダがつくようですが、これを利用できないでしょうか?
このヘッダが無い場合はSJIS優先の自動判定処理に投げるようにしておけば大丈夫ではないかと…素人考えですが。

ああ、けどU部品からデータ読みだした時はヘッダなしのUTF8Nなのか…。
と思ったらUグリッド以外から読んでみたら全部SJIS。Uグリッドだけ化けたのはこのせい?

ヘッダ有りのUTF8をU部品のデフォルトにすると良さそうな気もしますが、その場合に波及する影響が分からないので
申し訳ありませんが以上の気付いたことだけ書いてレス終わりにします。

(#2245) Re: グリッドにて一部文字がSJIS表示に化ける - うぇいく (2014-01-01 22:35) /低 未処理
 訂正です。
 実は、現在、Uniode部品の実態は通常の部品と同じものになっているようです。
 おそらく、部品から取得した値がShift_JISになっているのはそのためです。
(Uグリッドだけ動作が合わないのは、どうも、Unicode部品を無くした際の修正ミス(漏れ)のようです)

以前、実装されていたようなUnicode部品については、そのうち復活するかもしれません。
設定時の文字の認識については、とりあえず自動認識(ShiftJISでカナを設定すると化ける)になると思います。基本的に、常にUTF8で使うのが前提 と。
(取得される値はすべてUTF8・・・になると思います)

(#2241)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能