
C言語初学です。よろしくお願いします。
16進表記のunicodeの文字列データ(もともとは漢字のデータ)があり、
それをもとの文字列として出力したいのですが、
C言語でどういうプログラムを書けば良いのか分からず困っています。
============================================
例えば、「0x6F22」というデータがあった場合、
それを文字列に変換して「漢」という字を出力したいのです。
(http://ja.wiktionary.org/wiki/漢)
============================================
C99やC++、PHP、Rubyなどでは、
ユニバーサルキャラクタ(?)というのを使って
一発で変換できるようなのですが、
今回は学習目的というのもあって、
なんとかC言語でできないかと思っています。
おおまかな話でも良いので、
なにか取っ掛かりになる情報のご教示お願い致します。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
> wchar_tの内部表現がunicodeという決まりありましたっけ?
確かに wchar_t = Unicode(UCS2/4) を期待すると移植性なくなりますね。
厳密にやりたいなら ICU 使うとか、そんな対処になるのかと。
参考URL:http://site.icu-project.org/
No.5
- 回答日時:
wchar_tの内部表現がunicodeという決まりありましたっけ?
C99からは __STDC_ISO_10646__ が定義されていれば互換性はあるみたいですけど。
No.4
- 回答日時:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main() {
unsigned long value;
char* dummy;
const char* input = "0x6f22";
unsigned long val = strtoul(input, &dummy, 16);
setlocale(LC_ALL,"japanese");
printf("[%C]\n", (wchar_t)val);
return 0;
}
No.3
- 回答日時:
>strcat("\u","6f22")とかでは
>エラーになってしまいます。
とりあえず
"\u"と"6f22"を連結したところで"\u6f22"と同じにはならないです。
学習目的とおっしゃていますが文字コード関連は変換絡むと難易度高いですよ?
この回答への補足
>学習目的とおっしゃていますが文字コード関連は変換絡むと難易度高いですよ?
調べている中で確かに敷居の高さを感じます。
javaやpython,rubyといったところでは
一発で変換できるみたいだったので、
Cでも割りと簡単かと思ったんですが
そんな甘い感じではないのですね。
処理しようとしているデータが結構膨大なので、
速度の出るCで処理できればと思ったのですが、
C以外の言語も選択肢に入れて勉強してみます。
No.2
- 回答日時:
C99 は「C言語」だから C99 にすれば解決?
この回答への補足
> C99 は「C言語」だから C99 にすれば解決?
すいません。C99より古いのをなんというのか分からなかったので、
C言語と書いてました。
C99だとエスケープシーケンス(?)というのでしょうか、
"6f22"の前に"\u"を付けて、
printf("%s\n","\u6f22");
のようにすると「漢」が表示されたのですが、
いまそこでまた壁にぶち当たってます。
非常に単純なサンプルで申し訳ないんですが、
例えば下記のようなtest.cで
"\u"と"6f22"を連結させたような形で
printfに渡したいのですが、
strcat("\u","6f22")とかでは
エラーになってしまいます。
基本的なことかもしれませんが、
解決方法ありますでしょうか。
== test.c =======================
#include <stdio.h>
int main(void)
{
char text1[256]="6f22";
char text2[256];
/*
ほんとはここで
"\u"とtext1を連結させて、text2とし、
printfに"\u6f22"のような形で渡したい
*/
printf("%s\n",text2);
return 0;
}
==================================
No.1
- 回答日時:
取っ掛かりということなら iconv
この回答への補足
下記URLなどを参照したんですが、まだ理解不能状態です・・・
http://www.geocities.jp/sanpontze/web.html
勘違いしてたら申し訳ないんですが、
iconvは文字コード変換(例えばSJIS→UTF-8)で、
私のやりたいことは
「unicodeエスケープシーケンスのデコード」というものらしいので、
iconvは少し目的とは外れるのではないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「彡」って文字はなんという文...
-
EBCDIC⇒SJIS変換の方法
-
VS 2008(VB.NET)
-
CASLⅡ 文字データから数値デー...
-
ふりがなをアルファベット化す...
-
S-JIS → JIS コード変換するには
-
PS4コントローラーをPCでゲーム...
-
Microsoft365で作ったword文書...
-
VBA フォームのテキストボック...
-
4Kの外部モニターに出力すると...
-
《》で囲まれた文字をすべて削...
-
エクセルでアルファベットか数...
-
どっちが正しいですか? チョン...
-
VBの「As String * 128」とは?
-
エントリーシートについて
-
PD充電器について
-
バッチで指定ファイルの文末に...
-
Windows Formアプリからコンソ...
-
メールに添付する写真を並列さ...
-
Word 途中で勝手に改行してしま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
std::stringからLPCWSTR型への変換
-
ふりがなをアルファベット化す...
-
VS 2008(VB.NET)
-
「彡」って文字はなんという文...
-
2バイト文字をJEFからSJISに変...
-
JIS → S-JIS コード変換するには
-
COBOLによる全角・半角混...
-
ExcelVBA実行後に時々落ちる
-
フォームのコントロールのバッ...
-
sedで日本語の置換方法について
-
Symfowareでのデータ型変換につ...
-
数値のパック10進数の変換に...
-
S-JIS → JIS コード変換するには
-
RubyでUTF8のコード値を文字に...
-
英数字を含む文字列(0-9,A-Z)...
-
%fと%gについて
-
CString ←→ BSTRの変換について
-
C#でバイナリデータをテキスト...
おすすめ情報