- PR -

JIS変換とSJIS変換の方法がわかりません

投稿者投稿内容
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-12-08 21:57
引用:

ロロノア・ゾロさんの書き込み (2004-12-08 17:55) より:

”ロロノア・ゾロ”(14Byte)→”%m%m%N%"!&%>%m”(14Byte)と
なるようにしたいのです。             以上、お願いします。


この変換規則はJISコード、それも不完全なJISコードのようですね。
では……意地悪なことを言いましょうか

  • 変換元がUnicodeで「ロロノア・ゾロ」のとき(=14bytes)
  • 変換元がUnicodeで「%m%m%N%"!&%>%m」のとき(=28bytes)

の両者を、どう区別しますか(どう区別してますか)?
このままでは両者とも、変換後は同じ「%m%m%N%"!&%>%m」(=14bytes)になってしまうかと。
引用:

べるさんの書き込み (2004-12-08 20:17) より:

あと、jisの場合切り替え制御文字とかも入りますし。


とは、こういうことなのです。
ロロノア・ゾロさんの示した例の場合、JISコードとみなすには、切り替え制御文字が足りません。
本来は、たとえば

「ロロノア・ゾロ」(14bytes)
→「\x1B$B%m%m%N%"!&%>%m\x1B(B」(3bytes+14bytes+3bytes, \x1Bはエスケープコード)

のような感じで変換されねば、日本語文字(俗に言う全角コード、ここでは「\x1B$B」でJIS X 0208 1983に切り替える)と英数字記号等の文字(俗に言う半角コード、ここでは「\x1B(B」でASCIIコードに切り替える)との区別ができません。

※:JISコードやISO-2022は奥が深く、私も自信はありませんので。

引用:

ロロノア・ゾロさんの書き込み (2004-12-08 17:55) より:

よって、バイト数を変えずにってことです。


ということで、ロロノア・ゾロさんの示した例の場合は、切り替え制御文字を省略したために、たまたま14バイト同士になっただけです。

[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-12-08 22:56 ]
JW
常連さん
会議室デビュー日: 2004/01/14
投稿数: 49
投稿日時: 2004-12-09 09:47
引用:

ぢゃん♪さんの書き込み (2004-12-08 21:57) より:
この変換規則はJISコード、それも不完全なJISコードのようですね。
(略)
引用:

べるさんの書き込み (2004-12-08 20:17) より:

あと、jisの場合切り替え制御文字とかも入りますし。


とは、こういうことなのです。
ロロノア・ゾロさんの示した例の場合、JISコードとみなすには、切り替え制御文字が足りません。
(略)



切り替え制御文字がいるのは「JIS」では無く「iso-2022-jp」ではないでしょうか。
本当にJIS(この場合は2バイトの文字コード体系のJIS X 0208)のバイト列に変換したい、と言う要望なのかもしれません。
メールじゃないんだから「JIS」と言ったときにiso-2022-jpだと勝手に判断するのも先走りすぎな気はします。

もちろん質問者の説明不足の感は否めませんが…。
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-12-09 10:21
引用:

JWさんの書き込み (2004-12-09 09:47) より:

切り替え制御文字がいるのは「JIS」では無く「iso-2022-jp」ではないでしょうか。


もちろん、正しくは「iso-2022(iso-2022-jp)」です。
ロロノア・ゾロさんが
引用:

ロロノア・ゾロさんの書き込み (2004-12-08 16:08) より:

C#で下記の変換方法を教えてください。

Unicode→JIS変換とUnicode→SJIS変換。

引用:

ロロノア・ゾロさんの書き込み (2004-12-08 17:55) より:

”ロロノア・ゾロ”(14Byte)→”%m%m%N%"!&%>%m”(14Byte)と
なるようにしたいのです。             以上、お願いします。

というので「JIS」と呼んだだけです。
この変換規則では、「切り替え制御文字のない(あるいは省略した)iso-2022-jpっぽいもの」に見えますよ。

# はっきり言えば、JISコード表現そのものの話題には触れたくないです。
# 現在、一般的にはiso-2022-jpをもってJISコードといいますが、
# 区点とか、かつて存在したNEC-JISとか、いろいろありますし。

で、ロロノア・ゾロさんのプログラムが、たとえばJIS X 0208以外は一切使わせない、
とかの解決が既にあれば、それはそれでいいんですよ。
要するに、
引用:

ぢゃん♪の書き込み (2004-12-08 21:57) より:

  • 変換元がUnicodeで「ロロノア・ゾロ」のとき(=14bytes)
  • 変換元がUnicodeで「%m%m%N%"!&%>%m」のとき(=28bytes)

の両者を、どう区別しますか(どう区別してますか)?
このままでは両者とも、変換後は同じ「%m%m%N%"!&%>%m」(=14bytes)になってしまうかと。


ということが起きなければ良いので。

[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-12-09 10:25 ]
JW
常連さん
会議室デビュー日: 2004/01/14
投稿数: 49
投稿日時: 2004-12-09 10:38
引用:

(略)
というので「JIS」と呼んだだけです。


なので、「JISに変換したい」のであって「iso-2022-jpに変換したい」と書いているわけではないですよね?
引用:

この変換規則では、「切り替え制御文字のない(あるいは省略した)iso-2022-jpっぽいもの」に見えますよ。


ですから、JIS X 0208かもしれないと書いているわけです。
区別、ついていますか?

そもそも、
引用:

# 現在、一般的にはiso-2022-jpをもってJISコードといいますが、


自体が違うので。
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-12-09 10:47
引用:

JWさんの書き込み (2004-12-09 10:38) より:

ですから、JIS X 0208かもしれないと書いているわけです。


では、逆に質問します。
JIS X 0208ならば、どのような変換規則を使えば
引用:

ロロノア・ゾロさんの書き込み (2004-12-08 17:55) より:

”ロロノア・ゾロ”(14Byte)→”%m%m%N%"!&%>%m”(14Byte)と


になりますか?

# だからこの手の話題は大嫌い……。
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-12-09 10:55
で、本題から外れるため、話を分けます。こちらは特に返信を期待しませんので。
引用:

JWさんの書き込み (2004-12-09 10:38) より:

そもそも、
引用:

# 現在、一般的にはiso-2022-jpをもってJISコードといいますが、


自体が違うので。


一般で使われているテキストエディタ(ここでは手元にあるサクラエディタ・TeraPad、今ダウンロードした秀丸で確認)ではiso-2022-jpを「JIS」と呼んで扱っていますが、それは「一般的」には値しないと?

# 「間違って呼んでいる」という類の論点ならば、その論議には参加したくありません。

[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-12-09 11:19 ]
ロロノア・ゾロ
会議室デビュー日: 2004/12/08
投稿数: 4
投稿日時: 2004-12-09 11:18
皆さん、回答ありがとうございました。
とりあえず、解決はしました。
自分の説明不足により大変迷惑を掛けました。
言い訳としましては、理解が出来ていないため説明が出来なかったと
反省しています。 スミマセンでした。

今後は気を付けますので、また質問した時はよろしくお願いします。
JW
常連さん
会議室デビュー日: 2004/01/14
投稿数: 49
投稿日時: 2004-12-09 11:30
引用:

ぢゃん♪さんの書き込み (2004-12-09 10:47) より:
引用:

JWさんの書き込み (2004-12-09 10:38) より:

ですから、JIS X 0208かもしれないと書いているわけです。


では、逆に質問します。
JIS X 0208ならば、どのような変換規則を使えば
引用:

ロロノア・ゾロさんの書き込み (2004-12-08 17:55) より:

”ロロノア・ゾロ”(14Byte)→”%m%m%N%"!&%>%m”(14Byte)と


になりますか?

# だからこの手の話題は大嫌い……。


だーかーらー。「iso-2022-jp」と「JIS X 0208」が何か知っていればそんな疑問は出てこないと思うのですが。「文字集合」と「文字列符号化方式」と言う言葉もご存じないですか?
JIS X 0208はJISで定められた2バイトの文字集合です。「ロ」なら0x256dになります。
iso-2022-jpってのは、符号化方式の方です。どのような形式でストリームやら何やらに流すかを決めています。この「ロ」が0x256dだとして、0x25,0x6dとだけストリームに流しても確かにそれでは「%m」と区別がつかないので、JIS X 0208の文字を流す場合に制御コードが入り、またJIS X 0208からASCIIの文字に切り替える場合は制御コードで切り替えてるわけですよね。その切り替える方式のことをiso-2022-jpと言っているわけです。


で、iso-2022-jpはインターネット(特にメール)で漢字を含むデータを流す際にどうしたらいいか考えられて作られたものです。インターネットと無関係なくらい昔の機器では、漢字を扱うために、「何バイト分のデータのうちXバイトはASCII(かJIS X 0201)、残りの漢字部分はJIS X 0208のデータをそのまま送る」なんて制御コード無しでデータ送受する機器もあるわけです。制御コードがあっても別のものとか。

私はいちゃもんを付けたいために書いているのではないです。
「JIS=iso-2022-jp」ではない事もある(と言うか、JISは日本工業規格であってJISとだけかかれても困る)と言うことを考えて、そのあたりをふまえて熱くならずに読んでください。
---
あぁ、本題は解決してしまったようですが…

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