掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.27673

SJIS対応->UTF対応へのプログラムについて
投稿者---Craft(2006/07/18 13:49:49)


お久しぶりです、Craftです。

環境は未定なのではっきりしたことがかけないのですが、文字コードがSJISであることを前提でかかれたプログラムを、UTF対応に改修する方法を考える必要がでてきました。

今のプログラムの前提は以下の条件になっています。
プログラム改修と作り直しとどちらが効率がいいか、判断がつかない状況です。
ネタでかまわないので、意見をいただけないでしょうか?

現在のプログラム(Unix系Cコンパイラを使用していますが、純粋にC言語で書かれています)
(1) strcmp, strcpy等のstring.hの関数を頻繁に使用している
(2) is系関数を使用した文字評価が行われている
(3) バイトコード判定を行っている(1バイト文字か、2バイト文字か)
(4) 独自の文字列処理関数を作成している

環境
・UNIX系OSですが、OSのコードページに Shift-JISを使用しているものを、UTF系のコードページに変更する(つまり、OSのLOCALEがかわるが、使用するLocaleが未定)

Cで15年くらいコード書いてますが、<wchar.h>を使って手間かけて書き換えるにしても、(3)がネックで結局うまくいかないような気がしてます。
(4)もかなり問題だと思ってます。
規模としては万単位のステップ数です。

なおしてうまくいくかどうかわからないリスクを考えると、作り直しのほうが安全でしょうか?

Linux端末作って試してみればいいのですが、あいにく空き端末がないので・・。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:SJIS対応->UTF対応へのプログラムについて 27674 Blue 2006/07/18 13:54:29


No.27674

Re:SJIS対応->UTF対応へのプログラムについて
投稿者---Blue(2006/07/18 13:54:29)


リスクを考えると、入出力の部分だけ、文字コード変換し、
内部処理は SJIS のままにしておくほうがよさそう。

※UTFは一応UTF-8とする
入力文字列(UTF-8)

↓文字コード変換(UTF-8→SJIS)

内部文字列処理(SJIS)

↓文字コード変換(SJIS→UTF-8)

出力文字列(UTF-8)


この投稿にコメントする

削除パスワード

No.27675

Re:SJIS対応->UTF対応へのプログラムについて
投稿者---Craft(2006/07/18 14:03:45)


>リスクを考えると、入出力の部分だけ、文字コード変換し、
>内部処理は SJIS のままにしておくほうがよさそう。

なるほど、こういった対応策もありますね。
ご意見ありがとうございます。

この場合、SETLOCALE(LC_ALL,"xxx")でセットした文字がSJISの文字セットになかった場合(たとえば中国語の漢字など)、元の文字に復元できるのでしょうか?



この投稿にコメントする

削除パスワード

No.27676

Re:SJIS対応->UTF対応へのプログラムについて
投稿者---Blue(2006/07/18 14:08:53)


>この場合、SETLOCALE(LC_ALL,"xxx")でセットした文字がSJISの文字セッ
>トになかった場合(たとえば中国語の漢字など)、元の文字に復元できる
>のでしょうか?
多分、エンコードもデコードも不可能。
もともと、SJISに対応した処理になっている以上、そこをいじるしかないですね。

ということで、SJIS変換不可能の文字コードの入力がありうる場合は、
この方法は使えません。(というのを先ほど書き忘れた。)




この投稿にコメントする

削除パスワード

No.27677

Re:SJIS対応->UTF対応へのプログラムについて
投稿者---Craft(2006/07/18 14:18:13)


>多分、エンコードもデコードも不可能。
>もともと、SJISに対応した処理になっている以上、そこをいじるしかないですね。
>
>ということで、SJIS変換不可能の文字コードの入力がありうる場合は、
>この方法は使えません。(というのを先ほど書き忘れた。)

やっぱりそうですか。
となると C++ か他の言語かで書き直した方がよさそうですね。

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


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧