• 締切済み

unicode と shift_jis

テキストファイルを読み込みデータを作成して出力するプログラムを作成しているのですが国際化させることになりました。そこで問題が‥テキストファイルが日本用はshift_jis、海外用はunicodeで構成されています。shift_jisでの文字列操作は良いとしてunicodeが全然わかりません。海外向けを想定したときに気をつけなければならないこともわかりません。なんでもいいので教えてください。お願いします。特に、unicodeの文字列操作はまったくよくわかりませんので細かい点から教えていただけると光栄です。よろしいお願いします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。Wendy02です。 >いろいろな方法があるのは知っていますが本等で調べてもいまいちよくわかりません。 プログラム的にUnicode やShift-JISの振り分け辺りなら、それを扱う人なら誰でも知っていることですが、それ以上になると、分らないのです。 私は、以前、インターネット検索で行ったときも、VB系の資料は極端に少ないなぁって思いました。あっても、すごく内容的にお粗末極まりないものだったりします。(英語で調べても、言葉の問題は、ほとんど出てきませんね。おそらく、ドイツ語圏には、これにまつわる話が出ているような気がしますが読めません。私の知っているフランス系のツールは、メールで連絡して初めて国を知ったくらいですが、ドイツは、これも私の知っているものでは、ツールもWebサイトもVB系はバイリンガルに近いですね。おまけに、他言語に良く対応していますね。) >海外版の操作を考えたとき日本だけの物の感覚で作成してもいいのかと・・・・ それは、なんとも保証できかねるというか、やめておいたほうが無難なところですね。ツール系で、Caption を入れ替えるぐらい以外は、Universal というのはお目にかからないです。 日本で、日本語用のOSと日本語用のツールを使っている限りは、どうしても見えてこないものがあります。Office カテゴリで、中国語バージョンのExcelの話が出ていたので、逆に、聞いてみたのですが、回答が付きませんでした。せめて、OSから全て英語版のPCで試してみなければ、私などは、ぜんぜん自信が持てません。(開発用としてなら、高いものじゃありませんね。) 私は、仮にExcelという名前を出したまででしたが、実際に、そういうように使うとなると、私は、本当になんとも言えません。 >それをExcel に出力し印刷する。 経験的に、特に、この部分が分りません。知っている範疇からするとWordのバリエーションは少ないと聞きますが、Excelは、たぶん、日本やフランス、ドイツかな?独特の仕様を組み込まれている可能性があります。Excelの需要が極めて高いからだそうです。韓国版は、仕様内部が、極めて日本語版と似ているとか? まさか、Excel-書式-スタイルで、Arial Unicode MS なんて出来ないでしょう?それは乱暴すぎますからね。英米なら、ANSIでいいですから、ほとんど問題でないのですが。少なくとも、そのExcelは、ちょっとまずいかもしれませんね。せめて、その部分だけでも、独自に考えたらどうでしょうか? 最後に、おっしゃっている内容は、分りすぎるくらい分るのですが、VBだけならともかく、他のアプリケーションを絡ませるのは、まったく想像つかないのです。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 この問題をしばらく考えていましたが、具体的なことが書かれていませんので、どのように答えていいか分りませんでした。私は、経験的に、Excelを使う関係で、UnicodeとShift-JIS の行き来に、面倒な作業が必要になるときがあります。それは、最後にも書いてありますが、ExcelのベースがShift-JISだからです。もちろん、StrConv関数で変換できる程度なら問題はありませんが、テキストファイル(CSV)の入出力になると、それでは問題は解決しません。 しかし、Windows XP で、アプリケーションを、最初から、Unicode仕様で作っていって、困ることがあるのかなって思います。しいて言えば、いままでのツールとの互換性が問題があるのかもしれません。 例えば、Vector の中でフリーソフトウェアの中で、あるアプリケーションは、文字をインポート・エクスポートし、Win9xをサポートしていても、完全、Unicode仕様というものがあります。それは、インポート用のプログラムを備えているからでもあるのですが、それで、何か困ったことが発生したというサポート掲示板で読んだ覚えがありません。 そのアプリケーションは、ExcelのCSVを使う関係で、ワークシートが標準でShift-JIS仕様ですから、直接的には、ExcelのCSV の入出力はサポートしていません。(もちろん、直接、出入りすることなど、作者は考えていないだろうし、その作者の責任の及ぶところではないと思います。) 話を戻すと、そのアプリケーションが、完全、Unicode仕様なのは、中国語や韓国語やANSI以外の言語を表示するためにそうしたわけです。単に、ANSIなら考える必要はなかったと思います。専用変換ツールを備えてて、文字言語をUnicodeにするだけですから、Win9x系でも可能なのです。 結論として、ベースをUnicode仕様にしていく限りは、Shift-JISによる問題は、それほどに起こらないだろうと思うのです。(逆はひじょうに難しいだろうなって思います。)Shift-JISとUnicodeを判別するVB系のプログラムは周知のことでしょうから、それはあえて公開しませんが、そんなに複雑ではないと思います。ただ、それだけのことだと思います。 【 Unicode について 】(以下のサイトはとても良くまとまっています。)

参考URL:
http://www.psytec.co.jp/tips/0503/
suraboo
質問者

補足

回答ありがとうございます。 補足させていただきます。 複数のテキストファイルをVBで読み取りそれを照合させてMSFlexGridに表示してそれをExcel に出力し印刷する。といった流れのプログラムなのですが・・・・その読み取るテキストファイルが海外ではunicodeとshift_jisの照合、 日本ではshift_jis同士といったモノになっています。プログラムのなかで自動的に振り分けを行うものにするのは自分でもなんとか思いつくのですが海外版の操作を考えたとき日本だけの物の感覚で作成してもいいのかと・・・・なにか注意をするべきはないかとおもいまして。。。いろいろな方法があるのは知っていますが本等で調べてもいまいちよくわかりません。「それぐらいは知っているだろう」程度のことでもいいので書き込みをよろしくお願いします。

  • driverII
  • ベストアンサー率27% (248/913)
回答No.1

ユニコードからS-JISに変換し、処理を行い、 終わったらStrconv("文字列",vbUnicode) で戻してやれば良いのでは・・・ ちなみに下記のコードの著作権保持者は、参照URLの コードを書いた方に聞いてください。 --------------------------------------------- Public Function UnicodeToSJIS(ByRef strUnicode As String, ByRef bytSjis() As Byte) As Long Dim lngSjisSize As Long 'S-JIS 変換後のサイズ 'いったん文字列を S-JIS に変換し、そのサイズを求める lngSjisSize = LenB(StrConv(strUnicode,vbFromUnicode)) If lngSjisSize Then 'サイズの取得に成功した場合 'S-JIS 文字列を格納する領域を確保 ReDim bytSjis(lngSjisSize - 1) 'バイト型配列 bytSjis() に S-JIS 変換文字列を格納する bytSjis = StrConv(strUnicode, vbFromUnicode) UnicodeToSJIS = lngSjisSize '変換後サイズを返す End If End Function

参考URL:
http://www.geocities.co.jp/SilkRoad/4511/vb/nkf32dll.htm

関連するQ&A