C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: 文字列の全角半角判定


(過去ログ 17 を表示中)

[トピック内 26 記事 (1 - 20 表示)]  << 0 | 1 >>

■6223 / inTopicNo.1)  文字列の全角半角判定
  
□投稿者/ ek (1回)-(2007/08/06(Mon) 13:54:32)

分類:[C#] 

先日のオブジェクト指向講義を受けた者です。
とてもためになりました。

現在業務でC#を使用しているのですが、
文字列が全て全角か、半角かという判定を行える処理を
作ろうとしています。
MSDNで調べているのですが、一発で結果がわかるものが見当たりませんでした。
もしありましたら教えていただけないでしょうか。

ない場合は独自に処理を作成します><

欲しい処理は以下のようなものです。

if "あいうえお" == 全て全角か?
 全角です。
else
 半角が混ざってます。

よろしくお願いします。


引用返信 編集キー/
■6225 / inTopicNo.2)  Re[1]: 文字列の全角半角判定
□投稿者/ ひろ (2回)-(2007/08/06(Mon) 14:01:54)
もっと調べてから書き込みした方がいいと思います。
Googleで「C# 全角文字 判定」で検索したら出てきますよ。

引用返信 編集キー/
■6232 / inTopicNo.3)  Re[2]: 文字列の全角半角判定
□投稿者/ 中博俊 (1137回)-(2007/08/06(Mon) 15:43:18)
中博俊 さんの Web サイト
そんなことより、半角と全角の違いを定義しましょう。
Unicodeなせかいには半角とか全角という物は存在しません。
#文字名にはあるけど
引用返信 編集キー/
■6240 / inTopicNo.4)  Re[3]: 文字列の全角半角判定
□投稿者/ mあ (36回)-(2007/08/06(Mon) 18:06:36)
No6232 (中博俊 さん) に返信
> そんなことより、半角と全角の違いを定義しましょう。
> Unicodeなせかいには半角とか全角という物は存在しません。
> #文字名にはあるけど

HalfWidthとFullWidth
HalfWidth が 半角かと思いきや、"A" は FullWidth って全角って訳すのか?
と思いきや、訳したところで、"A" は HalfWidth じゃないし。

UNICODE halfwidth char
で検索

http://www.sljfaq.org/w/Half-width_katakana
日本語FAQ

http://unicode.org/reports/tr30/datafiles/WidthFolding.txt
これ見て、if 文で条件分岐したらどーでしょう?
500文字くらいだから、FF00から 00FF までの 256 個×2個の
マップを作ってもよさそうです。文字見本の右に書いてある、横文字
をフラグにすんのね。

http://glossary.tank.jp/t03F9.html
全角 とは
http://glossary.tank.jp/t019D.html
半角 とは

N○○か、○○通あたりが広めた言葉か?ワープロ専用機とか解説に
出てくるし。

http://e-words.jp/w/E58D8AE8A792E69687E5AD97.html
半角 とは

http://ja.wikipedia.org/wiki/%E5%8D%8A%E8%A7%92%E3%82%AB%E3%83%8A
Wiki




引用返信 編集キー/
■6243 / inTopicNo.5)  Re[4]: 文字列の全角半角判定
□投稿者/ Jitta (387回)-(2007/08/06(Mon) 18:53:58)
No6240 (mあ さん) に返信

光って回るところには、半角漢字なんてものが在りましたよ。
UNIXで処理するので、「半角カナは使わないで」ってお願いしたら、半角漢字が使ってあり、泣いた日もある。
引用返信 編集キー/
■6267 / inTopicNo.6)  Re[5]: 文字列の全角半角判定
□投稿者/ mあ (37回)-(2007/08/07(Tue) 11:05:45)
No6243 (Jitta さん) に返信
> ■No6240 (mあ さん) に返信
>
> 光って回るところには、半角漢字なんてものが在りましたよ。
> UNIXで処理するので、「半角カナは使わないで」ってお願いしたら、半角漢字が使ってあり、泣いた日もある。

へ〜、2バイト半角カナ文字くらいしか浮かばないや。
"全角" フォントの高さが売りで "半角" より5ドット多いから少しきれいだったよーな。
16*16(14*15) だから、7*15 の漢字って有り得ないというか、MACには、高さ11 ドット
のフォントがあって、480 ラインで 30 行以上表示出来るのがうらやましい時期があった
かも。でも、上下の未表示領域と裏VRAMの上半分を使って画面30行化計画が公開され
てからはMACなんてどーでも良くなったなぁ。。。乱視になった主要因はあのチカチカ
画面見すぎたせいかも・・・
ということで、大昔は、半角と全角っていうやや明確な定義がありましたね。少なくとも
N○○系を使っていた私には、半角ちゅーたら、ASCII のSJIS コード以外の部分、
全角ちゅーたら、0x80-0xA0,0xE0-0xFD 区間で始まる2バイトコードのことでした。
一部のマシンを除き、16ドットと8ドットフォントしか搭載していなかったから。
というか、12ドットフォントを搭載してた綺麗な文字が売りだったあの機種も、漢字は
24ドットだから、単純に倍、やっぱ、12ドットでも半角だし、24ドットで全角でしたね。



引用返信 編集キー/
■6287 / inTopicNo.7)  Re[3]: 文字列の全角半角判定
□投稿者/ ひろ (6回)-(2007/08/07(Tue) 15:47:01)
> そんなことより、半角と全角の違いを定義しましょう。

私の回答は「そんなこと」でしかた。
これは失礼しました。

半角と全角の定義については大事な話なので、このまま続けてください。

引用返信 編集キー/
■6290 / inTopicNo.8)  Re[4]: 文字列の全角半角判定
□投稿者/ 中博俊 (1138回)-(2007/08/07(Tue) 16:16:58)
中博俊 さんの Web サイト
ひろさんに言った覚えはないけど・・・

引用返信 編集キー/
■6296 / inTopicNo.9)  Re[5]: 文字列の全角半角判定
□投稿者/ ひろ (8回)-(2007/08/07(Tue) 16:35:50)
私の回答に対してのレスでしたので…
そういうことであれば、この件は終了ということで。
引用返信 編集キー/
■6297 / inTopicNo.10)  Re[5]: 文字列の全角半角判定
□投稿者/ ひろ (9回)-(2007/08/07(Tue) 16:40:36)
「半角漢字」ですか…
知りませんでした。

単純にユニコード文字列→ASCIIバイト配列として、半角文字の最大値(幾つだか忘れた)以上が1バイトでも
あれば全角を含むって判定でいいかなと思っていましたが、どうもそれでは不完全のようですね。

引用返信 編集キー/
■6362 / inTopicNo.11)  Re[6]: 文字列の全角半角判定
□投稿者/ hei (1回)-(2007/08/08(Wed) 13:16:50)
全角半角の定義は知りませんが、
現状では一般にShiftJISが使われていて
全角半角を区別しなければならないことが多いのではないでしょうか?

こちらを参考に
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=4871&forum=7
正規表現で次のように出来ました。

if(System.Text.RegularExpressions.Regex.IsMatch("あいうえお","^[^ -~。-゚]+$")){
Console.WriteLine("すべて全角です");
}else{
Console.WriteLine("半角がまざってます");
}

ところで、Javaな人は全角半角の変換をどうしているのでしょう?
ググって出てきた
ICU4J・com.ibm.icu.text.Normalizer のNormalizer.normalizeは
英数字は英数字は半角に、その他は全角に変換されるそうですが、
数字も全角にしたい時などは不便なように思います。

引用返信 編集キー/
■6370 / inTopicNo.12)  Re[7]: 文字列の全角半角判定
□投稿者/ Jitta (390回)-(2007/08/08(Wed) 18:17:19)
No6362 (hei さん) に返信
> 全角半角の定義は知りませんが、
> 現状では一般にShiftJISが使われていて
> 全角半角を区別しなければならないことが多いのではないでしょうか?

え〜?unicodeやEUCの立場は?メールはJISだったような?




> ところで、Javaな人は全角半角の変換をどうしているのでしょう?
> ググって出てきた
> ICU4J・com.ibm.icu.text.Normalizer のNormalizer.normalizeは
> 英数字は英数字は半角に、その他は全角に変換されるそうですが、
> 数字も全角にしたい時などは不便なように思います。
>

だから、全角半角の定義を!ってことですよ。第一、バイト数で制限するから全角半角の判断が必要で、文字数で制限すれば不要でしょ?
引用返信 編集キー/
■6371 / inTopicNo.13)  Re[1]: 文字列の全角半角判定
□投稿者/ シャノン (198回)-(2007/08/08(Wed) 18:29:04)
No6223 (ek さん) に返信
Unicode時代なんだから、全角半角を意識するような作りにするなよ、っていうそもそも論なのです。
それでも、どうしても判定しなければならない理由が、何かおありでしょうか?
引用返信 編集キー/
■6373 / inTopicNo.14)  Re[2]: 文字列の全角半角判定
□投稿者/ kk (2回)-(2007/08/08(Wed) 19:30:04)
No6371 (シャノン さん) に返信
> ■No6223 (ek さん) に返信
> Unicode時代なんだから、全角半角を意識するような作りにするなよ、っていうそもそも論なのです。
> それでも、どうしても判定しなければならない理由が、何かおありでしょうか?
Unicode時代だからと言って、既存のシステムの改修の場合はありでしょう?
ShiftJISで統一されているシステムで1画面だけUnicodeにするなんてことはしないでしょう?
前面改修なんてコストがかかりするぎる。
また、HTMLの場合、「0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000」は改行されないけど、
「00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000」は改行されるでしょ?
このページだってShiftJISだし。
引用返信 編集キー/
■6374 / inTopicNo.15)  Re[3]: 文字列の全角半角判定
□投稿者/ 中博俊 (1139回)-(2007/08/08(Wed) 20:10:33)
中博俊 さんの Web サイト
もういいよ。
外野がどうこう言う問題じゃない。
本人が定義しないことには何とも言えないんだから。

引用返信 編集キー/
■6375 / inTopicNo.16)  Re[3]: 文字列の全角半角判定
□投稿者/ シャノン (199回)-(2007/08/08(Wed) 20:19:27)
No6373 (kk さん) に返信
> Unicode時代だからと言って、既存のシステムの改修の場合はありでしょう?
> ShiftJISで統一されているシステムで1画面だけUnicodeにするなんてことはしないでしょう?

もちろんです。
ですが、スレ主はShift-JISだなんて一言も言ってないんです。みんなそこを突っついてるんですよ。
そこが明らかにならないうちは、話は進まないんです。
引用返信 編集キー/
■6376 / inTopicNo.17)  Re[4]: 文字列の全角半角判定
□投稿者/ hei (2回)-(2007/08/08(Wed) 23:57:11)
2007/08/09(Thu) 00:28:54 編集(投稿者)


>バイト数で制限するから全角半角の判断が必要で、文字数で制限すれば不要でしょ?
>Unicode時代なんだから、全角半角を意識するような作りにするなよ、っていうそもそも論なのです。

私は銀行などに納品しているテキストファイルを生成しています。
納品形態は顧客ごとに違っていますが、
すべてShiftJISでフィールドによって全角・半角を分けています。
この経験から上の発言をしましたが、
全角半角を意識するように指示されることは珍しいですか?

また、人が入力したものは全角半角が混在していることがあり、
どちらかに変換してから処理しなければならなかったこともあります。

私は独学で学んだためか、個人的な全角半角の定義は基本的に
「キーボードの全角・半角入力で入力されたもの」
程度の認識です。
みなさんがおっしゃっている「定義」の意味がいまひとつわからないのですが、
これ以降のレスで理解できたらと思います。
引用返信 編集キー/
■6377 / inTopicNo.18)  Re[4]: 文字列の全角半角判定
□投稿者/ hei (3回)-(2007/08/08(Wed) 23:59:47)
2007/08/09(Thu) 09:24:46 編集(投稿者)

連投したものを上書きします。

テキストを読み込む時と出力する時に
System.Text.Encoding.GetEncodingで文字コードを指定しますよね。
どんな文字コードから読み込んだとしても
内部的にはunicodeか何かに変換されて、
吐き出す時に指定した文字コードに変換されるということだと思うのです。
であれば、
全角・半角の定義とは大文字・小文字の違いと同じことだと思うのですが・・・
引用返信 編集キー/
■6409 / inTopicNo.19)  Re[5]: 文字列の全角半角判定
□投稿者/ hei (4回)-(2007/08/10(Fri) 00:42:25)
2007/08/10(Fri) 00:46:18 編集(投稿者)

あれ?
どなたか返信下さると思いましたがさびしいですね。

中さんのブログにあった、
文字コードU+0107(Cの上にちょん)が全角か半角かの定義よりも、
日本語キーボードで普通に入力可能でよく出てくる"0"と"0"の違いを判定する方が
よっぽど実用的だとおもうのですが。

>Unicodeなせかいには半角とか全角という物は存在しません。
一般のユーザーが入力した電話番号や住所の中にいわゆる全角半角が混在することがあると思いますが
このようなこともありませんか?



引用返信 編集キー/
■6410 / inTopicNo.20)  Re[6]: 文字列の全角半角判定
 
□投稿者/ YuO (1回)-(2007/08/10(Fri) 04:01:53)
No6409 (hei さん) に返信
> 2007/08/10(Fri) 00:46:18 編集(投稿者)
> >Unicodeなせかいには半角とか全角という物は存在しません。
> 一般のユーザーが入力した電話番号や住所の中にいわゆる全角半角が混在することがあると思いますが
> このようなこともありませんか?

文字列を扱っている以上「いわゆる全角半角」が意味を持たないので,「混在することがあると思いますが」自体が意味を持たず,
その質問への答えは,質問自体が意味を持たないので答えようがない,になります。
# 全角,半角の私にとっての定義は後で書いています。

そもそも,文字を扱う上での「全角」とか「半角」って何ですか?
混在する,というのは「全角」とか「半角」というものが存在することが前提だと思うのですが,そもそもその前提に対して異なる立場の人に対して前提を押し通そうとしているから話が通じていないのだと思います。
# ちなみに私は,「全角」「半角」はフォントの世界だけの話だと思っていて,文字集合や文字コードとは一切の関係を持たないと考えています。

なので,「私的な全角・半角の定義」を提供するか,「そもそも全角・半角には定義があることを示す」のどちらかをしないと議論はかみ合わないでしょう。
私的な定義を提供する目的は,その場における言葉の意味の共通化です (理由を示さないと,その意味で共通化されないでしょうが)。
後者は,UnicodeなりISOなりJISなりの文書の番号を提示することです。もちろん,その根拠が根拠として納得がいくだけのものである必要がありますが。
どちらにしても,下手な定義や根拠は議論を拡散させるだけでしょう。


一応,JIS B 0191 日本語ワードプロセッサ用語には定義がありますが,日本語ワードプロセッサとは無関係の話ですし……。
# ということは,一太郎であれば文字集合はUnicodeだけれど全角・半角がある……?でも,Bの用語だからやっぱり違う……?

ちなみに,JIS B 0191の定義を流用するとして,フォントにCourier Newを指定している場合,±や×や÷は半角として扱われます。
MS 明朝を指定しているのであれば,全角として扱われるでしょう。
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -