- PR -

クラス内での条件比較

投稿者投稿内容
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-10-24 15:01
引用:
If val = "..............." Thenで普通にやってみたのですが、駄目だったので試しにやってみました。

ということは一致してないのでしょう。

引用:
ウォッチ式で確認したのですが、両辺共に"..............."でした。

ですから、じゃんぬねっとさんがおっしゃっているように、同じに見えているだけかもしれませんから
バイト単位で比較してみましょう。

例えば、まずは
utf_bk.GetByteCount(文字列)
が一致するか見てみるとか。それでも同じなら、

utf_bk.GetBytes(文字列)
これがbyte配列を返すので、その要素がすべて一致するか見てみる(これはウォッチ式でもできます)
じゃらん
常連さん
会議室デビュー日: 2007/06/27
投稿数: 32
投稿日時: 2007-10-24 15:14
皆様。理解は悪く申し訳ありません。

ベルさんの確認方法で確認してみます。

結果を後ほど報告します。
じゃらん
常連さん
会議室デビュー日: 2007/06/27
投稿数: 32
投稿日時: 2007-10-24 16:02
おそくなりました。

べるさんに教えて頂いた確認方法でウォッチ式にて確認した結果、
utf_bk.GetByteCount("...............")  : 45
utf_bk.GetByteCount(val)                : 45
utf_bk.GetBytes("...............")    : {Length=45}
utf_bk.GetBytes(val)                  : {Length=45}

utf_bk.GetBytes("...............")の(0)〜(44)
utf_bk.GetBytes(val)               の(0)〜(44)
それぞれの中身も確認しましたが全て一緒でした。

クラス内で2バイト文字の比較は出来ないのでしょうか?
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-10-24 17:07
クラス内でとおっしゃっていますが、例えばaspx.vbの中だったら(これもクラスだけど)
大丈夫だったりするのですか。

dim str as String = sif_bk.GetString(System.Text.Encoding.Convert(utf_bk, _          sif_bk, utf_bk.GetBytes("...............")))
などとしてからstrをウォッチ式でみるか、ひとまずウォッチを信用するのをやめて
バイトの数値を全部ファイルに書き出してみるとか。

引用:
クラス内で2バイト文字の比較は出来ないのでしょうか?

そんなことはないです。ただ、
引用:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" culture="ja-JP" uiCulture="ja-JP" />

fileEncoding="utf-8"としていますが、本当にutf-8ですか?
この設定の、requestEncodingやresponseEncodingとの違いは理解していますか?

[追記]
ちょいと的外れな聞き方したかも、、
DownLoadクラスのファイルはUTF-8で保存されていますか?、、かな。

[ メッセージ編集済み 編集者: べる 編集日時 2007-10-24 17:17 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-10-24 18:48
どうやって持ってきた値と、何をもとにした値を比較しているのでしょう?

UTF-8で受け取りたいのに他のコードで放り込まれたためにUTF-16に変換できなかった値と、それを目で見てコードに埋め込んだ 「...」とでは、同じに見えて中身が違うのは、当たり前ですよね

ハッシュ値をとってみるのもひとつかと


16時2分の下の方を読んでなかった

String.Compare とかは?

[ メッセージ編集済み 編集者: Jitta 編集日時 2007-10-24 18:51 ]
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-10-24 19:00
引用:

じゃらんさんの書き込み (2007-10-24 16:02) より:
utf_bk.GetBytes("...............")の(0)〜(44)
utf_bk.GetBytes(val)               の(0)〜(44)


っていうけど数値で確認したのかね?
何度も何度も書かれてるのに。
多分じゃらん氏には回答者の求めている確認方法が伝わっていないと思う・・・
「文字コードの値で確認してくれ」なら通じるかな?
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-10-25 09:43
引用:

じゃらんさんの書き込み (2007-10-24 16:02) より:
utf_bk.GetBytes("...............")の(0)〜(44)
utf_bk.GetBytes(val)               の(0)〜(44)
それぞれの中身も確認しましたが全て一緒でした。


バイトの値も同じなのに比較で等しくならないというのは、非常に興味深い現象ですね。

ウォッチ式などからコピーしたvalの文字列と、文字列定数をクイックウォッチで比較してみてください。
"..............." = "..............."
こんな感じ。
結果はFalseになりますかね。
そうなら、左右の文字を同じ数だけ減らしながら結果を見てみましょう。
"............" = "............"
"....." = "....."
"." = "."
それでもFalseだったら文字列じゃなくて文字の比較をしてみます。cを付けて、
"."c = "."c
それでもFalseなら、左辺と右辺それぞれの文字の文字コードを調べてみてください。
同じってことはないと思います。

それでも原因が分からなければ、「セルの値が"..............."だったら」という条件で処理をしている所を、「セルの値が"ABC"だったら」とかにして試してみてください。

[ メッセージ編集済み 編集者: 一郎 編集日時 2007-10-25 09:45 ]
RUN
常連さん
会議室デビュー日: 2007/10/05
投稿数: 32
お住まい・勤務地: 東京都
投稿日時: 2007-10-25 09:57
まず文字コードと表示文字の関係の理解が先決なのかな?

コンピューターでは文字もデータとしては数値として管理されている(コンピュータの中身の世界は2進数しか扱っていない為)訳だけど、
たとえばASCIIコードで言えば、"1"は0x31だったり"A"は0x41だったりする訳だ。
んで、文字を比較して同じかどうかを調べると言うのは、基本的にはこの文字コードが一致するかを調べるわけだけど問題は"."の文字コードが何であるか。

おそらくこの文字コードが一致していないのではと言う事を聞いているわけです。
では何故一致しないのか?
1:比べている左右のコード体系が違う為、文字コードがずれている
2:"."を表示する文字コードが2種類以上存在している為、別文字の"."を比較している
と言う事が考えられる訳です。

2の文字コードが2種類以上と言うのはIMEのIMEパッド-文字一覧を覗いてもらうと、"・"に対して割り当てられてるのが大量に発見してもらえると思うので(正確には未割当てなコードが便宜上"・"と表示されているのだが…)そういうケースもあると認識してもらえばOKかな?

ここまで書いて気になるのは"・"では無くて"."なんだよね?
"."を外字登録とかしてるのかな〜?

スキルアップ/キャリアアップ(JOB@IT)