全角英数字を半角英数字に変換する方法を教えて下さい。

$data =~ tr/0-9a-zA-Z/0-9a-zA-Z/;

以上のようにした場合、J-perl意外では望みどおりに変換されません。

jcode.plをつかって
全角英数字を半角英数字に変換する方法があると、
書かれていた方がいましたので、
できればjcode.plをつかった場合の
具体的なスクリプトの書き方を教えて下さい。

よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

jcode.pl を使って $data の全角文字英数字を半角英数字にするには、次のようにするとできるかもしれません。



&jcode::tr(\$data, '0-9A-Za-z-', '0-9A-Za-z-');

参考 URL で詳しく書かれていますので、ご覧ください。

参考URL:http://www.mikeneko.ne.jp/~lab/kcode/jcode.html# …
    • good
    • 0
この回答へのお礼

スクリプトをEUCにして、

&jcode::tr(\$data, '0-9A-Za-z-', '0-9A-Za-z-');

と書くとうまくいきました。

ありがとうございました。

お礼日時:2002/01/26 23:14

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q半角カナを全角カナに変換したい

表題の通りです。
先輩から引き継いだエクセルのデータが、全角カナと半角カナとの両方を、使い分けなどではなく使用しているものだったので、半角カナを全部、全角カナに変換したいと考えています。
置換機能で50音全部を置換するのは大変ですので、一度に変換する良い方法があれば教えてください。
また、全角アルファベットを、普通の英字(半角アルファベット?)にも変換したいと思っています。

Aベストアンサー

=JIS(セル番地)
で全角に
=ASC(セル番地)
で半角になります。

QJcode.pmでの半角カナ→全角カナ変換

Webフォームから取得したデータに半角カナが含まれていた場合の文字化け対策として、Jcode.pmを使用して、下記のようにEUCに変換しています。

use Jcode;
$euc_string = jcode($form_input)->h2z->euc;

原理的には間違ってはいない筈ですが、ほとんどの場合、$form_inputの文字コードの判別に失敗(恐らく半角カナをEUCと誤認)し、文字化けしてしまいます。誤認しないように、下記の様に記述すれば、正しく全角カナに変換してくれます。

use Jcode;
$euc_string = jcode($form_input,"sjis")->h2z->euc;

ただ、入力コードがシフトJISとは限りませんので、この記述は好ましくないと思っています。

半角カナの文字化けは、webフォームを作られた方なら皆さん経験されていると思うのですが、どうされているのでしょうか?
Jcode.pmの文字コード判別は、半角カナが混じっていた場合、かなり長い文字列でないと判別に失敗するようなので、フォームで短い文字列(名前等)を入力させて処理させた場合、ほとんど上手く動かないようなのですが?

Webフォームから取得したデータに半角カナが含まれていた場合の文字化け対策として、Jcode.pmを使用して、下記のようにEUCに変換しています。

use Jcode;
$euc_string = jcode($form_input)->h2z->euc;

原理的には間違ってはいない筈ですが、ほとんどの場合、$form_inputの文字コードの判別に失敗(恐らく半角カナをEUCと誤認)し、文字化けしてしまいます。誤認しないように、下記の様に記述すれば、正しく全角カナに変換してくれます。

use Jcode;
$euc_string = jcode($form_input,"sjis")->h2z->eu...続きを読む

Aベストアンサー

私は、bkoさんのあげられているような、入力文字列を"SJIS"と決めうちする方法を取っています。ほとんどのブラウザでは、SJISでフォームを出力した場合にはSJISで日本語をエスケープして送信してくるからです。実際、SJISのフォームに対してeucで送信してくるブラウザは、最近のブラウザでは見たことがありません。
(昔は平気でeucで返してきましたけど:-))

sjisの半角カナはeucとかぶる領域に存在しますので、これを識別するには日本語として正しいのか、までを意識する必要があり、めんどうな実装となると思います。

Q全角半角変換 C++/CLI

C++/CLI(VC++2008) で
(1)たとえば 東京bay を 東京bay にという風に全角半角混在の文字列のなかの半角文字を全角文字に変換するにはどうすればよろしいでしょうか
(2)全角半角混在の文字列のなかの全角文字を半角文字に変換するにはどうすればよろしいでしょうか
 

Aベストアンサー

1. VBのStrConvを使う。

#using "Microsoft.VisualBasic.dll"
using namespace Microsoft::VisualBasic;

String^ s1 = L"東京bay";
// 全角文字へ
String^ s2 = Strings::StrConv(s1, VbStrConv::Wide, 0);
// 半角文字へ
String^ s3 = Strings::StrConv(s2, VbStrConv::Narrow, 0);


2. Win32 API LCMapStringを使う。

#include "windows.h"
#include "vcclr.h"
#pragma comment(lib, "kernel32.lib")

String^ s1 = L"東京bay";
pin_ptr<const wchar_t> p1 = PtrToStringChars(s1);

array<wchar_t>^ b2 = gcnew array<wchar_t>(s1->Length + 1);
pin_ptr<wchar_t> p2 = &b2[0];
::LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_FULLWIDTH, p1, -1, p2, b2->Length);
String^ s2 = gcnew String(p2);

array<wchar_t>^ b3 = gcnew array<wchar_t>(s1->Length + 1);
pin_ptr<wchar_t> p3 = &b3[0];
::LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_HALFWIDTH, p2, -1, p3, b3->Length);
String^ s3 = gcnew String(p3);

1. VBのStrConvを使う。

#using "Microsoft.VisualBasic.dll"
using namespace Microsoft::VisualBasic;

String^ s1 = L"東京bay";
// 全角文字へ
String^ s2 = Strings::StrConv(s1, VbStrConv::Wide, 0);
// 半角文字へ
String^ s3 = Strings::StrConv(s2, VbStrConv::Narrow, 0);


2. Win32 API LCMapStringを使う。

#include "windows.h"
#include "vcclr.h"
#pragma comment(lib, "kernel32.lib")

String^ s1 = L"東京bay";
pin_ptr<const wchar_t> p1 = PtrToStringChars(s1);

a...続きを読む

QJcodeモジュールを使うのが定石でしょうか? 半角カタカナ→全角カタカナ変換

perlで半角カタカナを全角に変える場合、Jcodeモジュールを使いますが、現在ソースでuse utf8を使っているので、すべて use Encodeのモジュールで半角カタカナを全角カタカナに変えることがしたいのですが、Jcodeモジュールを使うのが定石でしょうか?

Aベストアンサー

Jcode が一般的だと思います。自作するのも手ではありますが、大変だと思います。

Qワードで数字の全角を半角に(カタカナは全角のままで)変換するには?

ワードに100ページの文章があります。全角数字が散在しています。全角数字を半角に直したく、半角操作をかけるとカタカナも半角に変換されてしまいます。数字だけ変換されるようにするには、どのようにしたらいいのでしょうか。ワードの、書式メニュー→文字種の変換→半角、で操作をおこないました。

Aベストアンサー

メニューの[編集]→[検索]又は[Ctrl+F]で検索タブが開きます。

[検索する文字列]に[0-9]
(0、9、は全角。[ ]、-、は半角)

[見つかったすべての項目を強調表示する]にチェックを入れます。

[オプション]ボタンを押し[検索オプション]が開きます。
[ワイルドカードを使用する]にチェックを入れると[あいまい検索]のチェックが外れます。

[すべて検索]ボタンを押して、文書の中の全角数字の全てが選択状態になったら、
メニューの[書式]→[文字種の変換]→[半角]を選択します。

QJcodeモジュールの代わりにjcode.plで代用可能でしょうか?

こんばんわ。前回質問したときに、
回答をしていただいた方、ありがとうございました。

原因は、結局のところ、サーバー会社の自分の使っているサーバーに
ImageMagickがインストール?されていなかったみたいでした。
使えないのですが、(使用では使えることになっていた。)
と、連絡したところ、無事使えるようになりました。
ありがとうございました。

ですが、実際、ImageMagickを使ってみて、
その機能の一部である、文字合成については英数字のみできました。
プログラムのuseにある、Jcodeが、働いていないみたいでした。
これはサーバーのサポート外なので、どうしようもないのですが。

そこで、思いついたのは、jcode.plを使って、なんとかならないかなー?と、思ったのですが、これはさすがに、無理でしょうか?

当然できたとしても難しいとは思うのですが、どうでしょう?

無理でしょうか?
できるのでしょうか?できたとしても、かなり難しいのでしょうか?
できるとしたら、どんな感じに組めばいいのか、参考になるアドバイスがいただけたらと、思っているのですが。

よろしくお願いします。

↓は日本語が表示されなかった、プログラムです。

#!/usr/local/bin/perl -w

use strict;
use Jcode;
use Image::Magick;

# 画像を指定
my $file = "sample.jpg";

# 合成したい文字列
my $text = "ABC123日本語";

# UTF-8へ変換
$text = jcode($text)->utf8;

# オブジェクト作成
my $image = Image::Magick->new;

# 画像読み込み
$image->Read($file);

# 文字を記入する
$image->Annotate(text=>$text, stroke=>'#FFFFFF', fill=>'#005599',
font=>'sazanami-gothic.ttf', pointsize=>'36',
x=>'20', y=>'40', encoding=>'UTF-8');

# 画像出力
print "Content-type: image/jpeg\n\n";
binmode STDOUT;
$image->Write('jpeg:-');

undef $image;
exit;


よろしくお願いします。

ありがとうございました。


よろしくお願いします。

こんばんわ。前回質問したときに、
回答をしていただいた方、ありがとうございました。

原因は、結局のところ、サーバー会社の自分の使っているサーバーに
ImageMagickがインストール?されていなかったみたいでした。
使えないのですが、(使用では使えることになっていた。)
と、連絡したところ、無事使えるようになりました。
ありがとうございました。

ですが、実際、ImageMagickを使ってみて、
その機能の一部である、文字合成については英数字のみできました。
プログラムのuseにある、Jcode...続きを読む

Aベストアンサー

ImageMagickの文字合成は、
UTF-8でエンコードされた文字以外では文字化けします。
ImageMagickの仕様です。

そして、jcode.plはUTF-8を扱うことはできず、
ここは素直にJcode.pmを利用する他ありません。
(PerlのバージョンによってはUTF-8の扱いも可能)

参考URLのページの下の方に書かれてある、
「Tarballを直接入手」という項目より、
ZIP版のJcodeをダウンロードして、展開したのち、
そこに含まれる Jcode.pm ファイルを use しているスクリプトと、
同一のディレクトリに置くことで利用できます。

参考URL:http://openlab.ring.gr.jp/Jcode/index-j.html

Qキーボードでの「英数(全角/半角)」変換

 言語変換関係の質問は、「言語バー」「キーボード」関係で、多数あるのですが、どれが自分の探している症状なのか分からないので、新しく質問します。
 PCはSOTECのWV2150Cで、OSはWindowsXPで、ローマ字入力しています。
 キーボードによる、「英字和字」変換と、「英字の全角・半角」変換が、自分の意図しない変換に、どういうわけか、時々変わってしまいます。言語バーをマウスでクリックするのは面倒なので、キーボードで操作したいのですが、それが、コントロール不能になってしまうわけです。
 具体的には、まず「英字の全角」と「和字の全角」の相互変換ですが、うまくいっているときは、通常和字にしているときキーボードの「英数・CapsLock」を押すだけで「英字全角」に変換できます。また押せば、元に戻せます。しかし、何かの拍子で、このキーを押すと、「英字の半角」になってしまい、どうしても「英字の全角」になりません。しかし、時間が経って、いつのまにか、相互変換できるように戻っていることもしばしばです。
 「英字の半角」はキーボード上部の「半角/全角」キーで「英字半角」と「和字全角」とが相互変換できるので、「英数・CapsLock」キーでは、「和字全角」と「英字全角」の相互変換を維持したいわけです。というより、このキーの操作を、どちらも使えるよう、自分でコントロールしたいわけです。
 自分でコントロールするためには、「英数・CapsLock」キーを押すと、何かの拍子で、「英字全角」になったり「英字半角」になったりする、その「何かの拍子」が分かればいいと思うのですが、それが、分かりません。
 PCの種類によって、キーボード操作は違うのかもしれませんが、一つ、よろしくお願いいたします。

 言語変換関係の質問は、「言語バー」「キーボード」関係で、多数あるのですが、どれが自分の探している症状なのか分からないので、新しく質問します。
 PCはSOTECのWV2150Cで、OSはWindowsXPで、ローマ字入力しています。
 キーボードによる、「英字和字」変換と、「英字の全角・半角」変換が、自分の意図しない変換に、どういうわけか、時々変わってしまいます。言語バーをマウスでクリックするのは面倒なので、キーボードで操作したいのですが、それが、コントロール不能になっ...続きを読む

Aベストアンサー

#2です。

質問者さんの使用法なら、必要はないでしょうが、
 >このキーの操作を、どちらも使えるよう、自分でコントロールしたい
ということなので、補足しておきます。

「全角英数」/「半角英数」を基本設定の優先順位と逆のほうにしたいときは、[Caps Lock]の後、[Shift]+[無変換]で行えます。

なお、ご存じかと思いますが、「全(半)角英数」から「ひらがな」に復帰するには、[Caps Lock]のほか[無変換]でも[カタカナ ひらがな]でも可能です。

ひとつ注意が必要なのは、これもご存じかも知れませんが、次の点です。
「全(半)角英数」モードで入力作業をした後、「ひらがな」に復帰することなく、[半角/全角]によって「直接入力」モードにすると、
次に「ひらがな」に復帰しようとしても、[半角/全角]を押したのでは戻れず、「全(半)角英数」になるだけです。
この場合、その上で[Caps Lock]を押せばいいのですが、「直接入力」から[カタカナ ひらがな]を2回押す方法もあります。
とにかく、[半角/全角]を何度押しても行ったり来たりするばかりで、「ひらがな」には戻れません。

御参考までに、次のような操作法も考えられます。
1.「ひらがな」→「全(半)角英数」は[Caps Lock]
2.「ひらがな」→「直接入力」は[半角/全角]
これは当たり前ですね。

3.「全(半)角英数」→「ひらがな」は[カタカナ ひらがな]
4.「直接入力」→「ひらがな」も[カタカナ ひらがな]
 * 1回押して「全(半)角英数」になったときは、続けてもう1回押す。
 (ややこしければ、常に2連打することにしてもよい。)

つまり[半角/全角]や[Caps Lock]をON/OFに使うのではなく、それぞれ一方通行にしておいて、
「ひらがな」に復帰するときはいつも[カタカナ ひらがな]を使うという方法です。

#2です。

質問者さんの使用法なら、必要はないでしょうが、
 >このキーの操作を、どちらも使えるよう、自分でコントロールしたい
ということなので、補足しておきます。

「全角英数」/「半角英数」を基本設定の優先順位と逆のほうにしたいときは、[Caps Lock]の後、[Shift]+[無変換]で行えます。

なお、ご存じかと思いますが、「全(半)角英数」から「ひらがな」に復帰するには、[Caps Lock]のほか[無変換]でも[カタカナ ひらがな]でも可能です。

ひとつ注意が必要なのは、これもご存じかも知れ...続きを読む

Q全角数字を半角数字に変えたいがtr/0...9/0...9/だけではうまくいかない。

HTMLから、全角数字を入力しても、半角数字に変換して、
計算処理をしたいのですが、うまくいきません。現在
$kazu =~ tr/0123456789-/0123456789-/;
としているのですが、
全角で 123 と入力すると、 030507 と返ってきます。
どうしたら良いか教えてください。
8進数→10進数 16進数→10進数の
変換を試みたのですが、違うみたいです。
よろしくお願いします。

Aベストアンサー

もし、Perlのバージョンが5.8ならば、スクリプトの先頭に
use encoding 'sjis';
を入れてみてください。
※スクリプトがeucの場合は、sjis を euc-jp に替えてください。

また、それより以前のバージョンならば jcode.pl を使い、
jcode::tr(\$kazu, '0123456789-', '0123456789-');
としてください。

参考URL:http://www.mikeneko.ne.jp/~lab/kcode/jcode.html#h2-10

QALT+半角/全角を押さなければ、文字を変換できません。

PCを立ち上げ、文字を最初に入力しようとすると、英数字で入力されます。

そこで、日本語に変換しようとするのですが、ALT+半角/全角を押さなければ、文字を変換できません。


その後は、半角/全角を押すだけで、変換できるようになります。



一番初めから、半角/全角を押すだけで、変換できるようにするためにはどうすればいいですか?



PC
dell 1525
WindowsVista Home Premium
http://www.sd-dream.com/pasocompass/PC/Dell/Inspiron1525.html

Aベストアンサー

自分の場合は既定の言語を
”日本語(日本)-日本語”から
”日本語(日本)-Microsoft IME”
にしたら半角/全角だけで変換できるようになりました。

Qjcode.pl

日記などのスクリプトを作成しているのですが、とりあえず今まで、そこまでの理由もわからず他のスクリプトに習ってjcode.plをデコード処理部で
&jcode'convert(*value,'sjis');
&jcode'convert(*name,'sjis');
のように使ってきました。

ですが、たまたま今回、jcode.pl等を書き忘れてしまったのですが、ブラウザから投稿してみても文字化けという文字化けが起こりません。スクリプト自身はsjisで書いています。ログファイルもどうやらsjisコードで書き込まれているようなのですが、それでもjcode.plは必要なのでしょうか。windows XP にApache + Active Perl での動作と、@niftyで設置して動作を確認しました。

この場合、jcode.plは必要あるのでしょうか?

Aベストアンサー

汎用性を考えるなら、あったほうが便利です。
絶対に固定環境でしか使わないし、今後も使わない。むしろ、固定環境以外使わせない、と固く信念を貫けるのであれば、そのままでいいかもしれません。

もし、そのコードを他人に配布する予定があるのであれば、保険として対応しておいた方が望ましいでしょう。(事後サポートのことも考えるのであれば余計に)


人気Q&Aランキング

おすすめ情報