• ベストアンサー

全角日本語について

 全角日本語はchar型を2つ連続で続けて出力しないといけませんよね。半角だと1バイトですむところを2バイト使っているわけですけど。半角と全角が入り混じったテキストから的確に1文字ずつ取り出すことは出来ないのでしょうか?(2バイトずつ取り出すと、半角のところで文字化けになってしまいますし、1バイトずつだと全角のところが文字ばけしますよね。)半角の時は、半角を、全角の時は全角をという風に。。。  あと、全角の日本語を一文字として扱う型は何かないでしょうか。いつも、charの配列でchar[0],char[1]として使っているのですが。 ちなみに、windows98でBorlandのTurbo C++を使って、C言語で書いています。 なにとぞ、よろしくおねがいします。

  • Nickee
  • お礼率79% (107/134)

質問者が選んだベストアンサー

  • ベストアンサー
  • pikacchu
  • ベストアンサー率44% (11/25)
回答No.1

混在文字列の処理は確かに面倒と言えば面倒ですが、私は以下のように処理していました。(最近、プログラムを作っていないので・・・)  1.配列より取り出した1バイトを半角文字かどうか判断する。    ライブラリのisascii()等を使用する。この辺りはコンパイラによる    ところがありますので注意して下さい。  2.1バイト文字であればそのまま出力し、そうでなければ該当の1バイト    とその次の1バイトを出力する。 こう言った場合は、面倒ですが1バイトずつ判断して処理するしかないと思います。混在文字列の文字を1文字として扱いたいのであればUNICODEとかで扱えば可能だと思いますが、これは経験がないのであくまで参考として下さい。 上記はあくまで、表示可能な文字列のみの配列の扱いですので、制御コードとか全角でも表示できないコードとかは考慮していません。

Nickee
質問者

お礼

やはり、1バイトずつ判断するしかないのですね。挑戦してみます。

その他の回答 (4)

  • yu-ji
  • ベストアンサー率19% (15/78)
回答No.5

ShiftJISでは半角は1文字1byte、 全角は1文字2byteになっていますね。 UNICODEを使えば半角も全角もどちらも 1文字2byteで扱えますので便利ですよ。 一回お試し下さい。 それば無理なら、 やはり半角か全角かを判定してくれるマクロか何かを作成して 一文字ずつ判定していくしかないでしょうね。

Nickee
質問者

お礼

 UNICODEってものを使ってみます。 ありがとうございました。

  • alfeim
  • ベストアンサー率58% (114/195)
回答No.4

ShiftJISでは漢字は2バイト文字のため、charではサイズが足りません。 WORD型やwchar_tであればサイズは足りるでしょうが、ASCII文字やいわゆる半角カナなどの1バイトで表現される文字と混合して扱うのが難しくなります。 可能であればUTF-16などの文字種(表現に使うバイト数が変化しないようなコード体系)に変換して扱えばよいと思います。

Nickee
質問者

お礼

>可能であればUTF-16などの文字種(表現に使うバイト数が変化しないようなコード体系)に変換して扱えばよい コード変換はどのようにするか今のところわかりませんが、がんばってみます。 ありがとうございました。

noname#25358
noname#25358
回答No.3

 シフトJISですよね。  その場合は、その文字が全角かどうかは、数値の範囲によって決まっています。  参考URLのところに俺が以前使ったページを記載しておくので調べてみてください。  で、読み込んだ文字が全角なら次の文字と一緒に出力するようにすればOKのはずです。

参考URL:
http://www.hosibune.net/~mak/technical/kanji.shtml
Nickee
質問者

お礼

 はい、シフトJISです。参考にさせてもらいます。 ありがとうございました。

  • selenity
  • ベストアンサー率41% (324/772)
回答No.2

TurboC++であるかどうかは不明ですが、 「wchar_t」で代用できませんか?

Nickee
質問者

お礼

wchar_tがありました。参考にさせてもらいます。 ありがとうございました。

関連するQ&A

  • 「半角/全角」を教えても日本語になりません。

    今、一太郎10をインストールしたのですが, インストール後に、Alt+半角/全角を押さないと日本語に変わらなくなりました。   今までは半角/全角だけを教えていたらすぐに日本語になっていたのに、いきなり面倒になりました。    今までのように半角/全角だけで日本語になるようにするにはどうすればよいのでしょうか?  ヘルプでみたのですがよくわかりませんでした。  よろしくお願いします。

  • 半角/全角で日本語入力ができなく・・・

    windowsXPを使用しているのですが、先日突然半角/全角キーで日本語入力ができなくなりました。 半角/全角を押すと『‘』という文字が出てきてしまいます。 Alt+半角で日本語にできるのですが、その際前と違うキー配置になっていたり〔Shift+@が違う記号になるなど〕してしまいます。 他の質問を見たのですが、その通りにやっても直りません。 どうすればいいのでしょうか? よろしくお願いいたします。

  • 日本語を配列に収め、そして表示するには?

    日本語が書かれたファイルから、その日本語をEUCコードとして配列に収めたいのですが、どうすればいいのでしょう? 英字だったらchar型の配列に入れてしまえばいいですが、char型って1バイトの入れ物ですよね。日本語は2バイト... int型に入れちゃっていいんでしょうか?…でも、今度はその配列に収めた日本語を表示するトキはどうしたらいいんでしょ??書式は%cでいいのですかね…?(EUCコードで表示するときと、他のコードで表示するトキはどうやって区別するんだろ?というのも疑問です。) よろしくお願いいたします。

  • Wordの日本語全角文字・半角カタカタ文字の見つけ方

    海外向けの文書を作成中で、日本語から英語に翻訳しているのですが、頁数が多いため、分担して翻訳してます。 ところが、もとのワードファイルに上書きしているため、 2バイトの文字(日本語全角文字・半角カタカタ文字)が混在しているようです。英語圏ですと2バイトは見れませんので、1バイトにしなければなりません。 見た目は、英文ですので、見つけるのに時間がかかります。 何か簡単に見つける方法はないでしょうか?

  • Javaで日本語1文字のバイト数

    Javaで日本語1文字のバイト数はいくつになるのでしょうか。 単純に2バイトではないような書き込みを見たことがあるのですが本当でしょうか。 2バイト以外は特殊な文字で「あいうえお山川」のような通常使う文字が2バイト ということでしょうか。 また、C言語(C#も含む?)であれば全角は2バイト、半角は1バイトで計算できると いうのは本当でしょうか。

    • ベストアンサー
    • Java
  • 全角文字を文字化けしないで切るには?

    今、掲示板を作っています。 題名だけをツリー状に表示しようと思っていて、 長すぎる題名を30バイトでくぎろうと思っているのですが、 文字に半角などが混じっていて、30バイト目と31バイト目に全角が入ってしまうと、文字化けをしてしまいます。 どのようなプログラムにすれば文字化けをふせげるのでしょうか?

  • 日本語入力の切り替え 半角/全角キーのみ

    IMEを使用してWindowsXPで日本語入力をしています。日本語入力への切り替えを「半角/全角キー」のみで行っているのですが切り替わりのタイムラグ?があります。 直接入力(キーボードを打つと「ohayou」) ⇒ 「半角/全角キー」を押してから文字入力(下に点線が表示された状態で「ohayou」) ⇒ 英字を入れたいのではないので消す ⇒ 再度入力すると普通に日本語入力状態(下に点線が表示された状態で「おはよう」) 「半角/全角キー」を押してから文字を打ちだす感覚が短すぎるのでしょうか。「Alt+半角/全角キー」にすればちゃんと切り替わるのかもしれませんが、できればなれた「半角/全角」だけで済ませたいです。 IMEの設定では「キー設定:MicrosoftIME」「半角/全角:IME オン/オフ」になっています。 同じ状況の方で改善された方などいらっしゃたらアドバイスいただけたら嬉しいです。よろしくお願いいたします。

  • 英語キーボードのアプリケーションキーに半角/全角を割り当てたい

    英語キーボードのアプリケーションキーに半角/全角を割り当てたい 英語配列のキーボードを友人から貰ったのですが日本語入力への切り替えが面倒くさいです。 普通の文字ならまだ見なくても打てるのですが記号とかはさっぱりで・・・ そこで全くもって使わないアプリケーションキーに半角/全角キーと同じ動作(?)を割り当てていんですが可能でしょうか?

  • 日本語への変換ができません。

    ずっと「半角/全角」にて日本語への変更ができていたのに、最近になって「半角/全角」キーにて日本語への変更ができなくなりました。 半角英字の時に「半角/全角」を何度押しても半角英字のままで、日本語へ変更するにはALT+「半角/全角」を押す必要があります。 もちろん、全角カタカナ、半角カタカナにも変更できません。 逆に日本語入力の時に「半角/全角」キーを押すと半角英字に戻ってしまいます。 言語バーの設定はわかる範囲でいろいろやってみましたが効果なしでした。 非常に不便な思いをしています。解決策などわかる方よろしくお願いします

  • substr で全角半角混在の文字列を抜くには…

    全角と半角の混ざった文字列で下のようにすると、1byte文字が混ざったときの最後の1文字が文字化けします。 $kensaku = substr($namae, 0, 10); 原因は分かったので色々なサイトを調べたのですが、頭がついてきません… 全角だけのときは10byte 半角が奇数混じったときは11byte 半角が偶数混じったときは10byte を$kensaku に渡すには どの様な記述をすればいいのでしょうか? 既出の質問で申し訳ございませんが、どうぞ宜しくお願い致します。

    • ベストアンサー
    • Perl

専門家に質問してみよう