
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 変換のプログラムを教えてください。 6 2023/07/01 09:57
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- その他(Microsoft Office) Microsoft IME 一発で変換できない言葉がある 3 2022/07/19 19:29
- C言語・C++・C# C言語で 英文字のみからなる文字列、”Radar”、”WasItACatISaw”、”a”、””(空 5 2022/12/20 15:17
- C言語・C++・C# C言語について質問です。 以下のような結果を出すためにはどのようなコードが良いですか?サンプルコード 3 2022/11/01 16:19
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- C言語・C++・C# 【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法 4 2023/05/09 15:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
std::stringからLPCWSTR型への変換
-
ふりがなをアルファベット化す...
-
%fと%gについて
-
「彡」って文字はなんという文...
-
フォームのコントロールのバッ...
-
COBOLによる全角・半角混...
-
VS 2008(VB.NET)
-
char関数/code関数の多言語化に...
-
データベースの形式を認識でき...
-
RubyでUTF8のコード値を文字に...
-
文字列を数字に変換する暗号化方式
-
数値のパック10進数の変換に...
-
10進数→2進数への変換
-
ExcelVBA実行後に時々落ちる
-
VB初心者ですが教えてください...
-
JIS → S-JIS コード変換するには
-
CString ←→ BSTRの変換について
-
Symfowareでのデータ型変換につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
std::stringからLPCWSTR型への変換
-
ふりがなをアルファベット化す...
-
「彡」って文字はなんという文...
-
VS 2008(VB.NET)
-
フォームのコントロールのバッ...
-
ExcelVBA実行後に時々落ちる
-
sedで日本語の置換方法について
-
COBOLによる全角・半角混...
-
Excelマクロにて30分単位の計算...
-
Symfowareでのデータ型変換につ...
-
2バイト文字をJEFからSJISに変...
-
「髙(はしごたか)」を文字コー...
-
S-JIS → JIS コード変換するには
-
%fと%gについて
-
PL/SQLでSJISの文字コードを取...
-
JIS → S-JIS コード変換するには
-
RubyでUTF8のコード値を文字に...
-
英数字を含む文字列(0-9,A-Z)...
おすすめ情報