
A 回答 (9件)
- 最新から表示
- 回答順に表示
No.9
- 回答日時:
HEW(SHなのか、H8なのか、M16CやM32Cなのか分かりませんが...)のような組み込み向けの環境では、ロケールに関しては最低限の実装しかされていないことが多いはずです。
ですので、表引きにすることをお勧めします。
UTF-8 → UTF-16の変換をまず行い(サロゲートは無視しても大丈夫ですよね?)、対応するシフトJISのコードを格納した配列を用意してください。
実際には65536個の配列にする必要まではないので、シフトJISに変換可能な部分だけの(歯抜けの)配列をいくつか用意することになるかと思います(ROMサイズが許せば、ベタで持った方が楽ですが...)。
この回答への補足
M16Cです。
表引きのサンプルコードや参考になるHPなどはありませんでしょうか?
また、最低限の実装しかしてないとして、
どの程度できるのか試してみたいのですが、
それのサンプルなどもないでしょうか?
No.8
- 回答日時:
#7です。
>最終的な環境は組み込み環境でファイルシステムは
>TOPPERSでも採用されているFatFSを使います。
>コンパイラはHEWで、書き込まれる先はSDです。
なるほど。
しかし、それでしたらいっそ、ファイルシステムをUTF-8で作ってしまってはどうでしょう?
sjisと使用する文字コードの範囲もそう変わらないですし、大きな問題は無いように思えます。
むしろsjisの2バイト目の¥コードの問題を考慮しなくていい分、実装が楽かも。
ただ、ファイル名が8.3しかないので、UTF-8だと文字数が入らないという問題はありますかね。
もっとも、sjisを使っても4文字しか入りませんし、「テストです.txt」はどのみち無理。となると、sjisでもUTF-8でもない、独自のコードにしてしまうという手もあるかもしれません。
この回答への補足
すでに出来ているファイルシステムをいじるよりは、
文字コード変換の方が簡単かなと思いました。
それとSDで保存するのですが、windows上でもそのSDは見るので、
Shift-JISの方が助かるのです。
「テストです.txt」の文字数は単純に間違えました。すいません。
HEWにもwctomb関数があるので、それで行ってみようと思ったのですが、
0バイト変換か-1を返すかのどちらかになってしまい、
なかなかうまく行きません。
"%E3%83%86%E3%82%B9%E3%83%88%E3%81%A7%E3%81%99.txt"
を
30C6 30B9 30C8 3067 3059 ".txt"
と変換しているのですがこれがまずいのかもしれません。
No.7
- 回答日時:
>最終的にはその日本語ファイルのオープンを行いたいです。
環境は何でしょうか?
オープンに使われる関数/APIがShift-JISに対応していないと、
作業自体がまったくの無駄ですよ。
それに、Windowsであれば、Unicodeのファイル名のままでファイルのオープンが可能ですので、Shift-JISへの変換は不要です。
環境によっては、UTF-8のままファイルをオープンできることもあるようですので、それなら変換は一切不要ですね。
この回答への補足
最終的な環境は組み込み環境でファイルシステムは
TOPPERSでも採用されているFatFSを使います。
コンパイラはHEWで、書き込まれる先はSDです。
なので、ファイルオープンの為にはファイル名は
Shift-JISである必要があるかと思っています。
変換プログラムのデバッグ自体はwindowsでおこなっていますが・・・。
No.6
- 回答日時:
規格厳密合致プログラムを書くには、自前で表を作るしかありません。
しかし、処理系を特定してもよいのであれば、標準関数で実現することは可能です。
例えば、setlocaleでLC_CTYPEのロケーるをシフトJISおよびUTF-8に設定でき、かつwchar_tがそれぞれのロケールにおいて同じ内部表現を用いるのであれば、mbtowc/wctombまたはmbstowcs/wcstombsの組み合わせで変換することができます。
Amendment1以降(__STDC_VERSION__ >= 199409L)であれば、mbrtowc/wcrtomb、mbsrtowcs/wcsrtombs、またはsprintf/sscanfの組み合わせで変換することもできます。
この回答への補足
mbtowc関数はHEWで使えたので、実験してみる価値はありますね。
setlocaleでシフトJISを設定できるかとか、
デバッガでマルチバイト文字が見れないとか色々調査が必要です。
とりあえず、mbtowc自体を使ったことがないので、
windowsで実験してみます。
No.5
- 回答日時:
ShiftJIS⇔JIS⇔EUCは計算で変換できますが、Unicodeはテーブルを使わなければ変換できません。
ですので自前で処理したいなら、変換表を用意しなければなりません。
No.2
- 回答日時:
>Unicode→Shift-JISが全く検討が付かない状態です。
WindowsのVisualC++にはそんな関数があったような
WideCharToMultiByte( )だったかな
もちろん環境依存の非標準関数のはずです
No.1
- 回答日時:
>標準関数
まずここが無理。
なぜならCは(略)規格が古く(略)文字コードという概念が(略)無いから。
その文字列を一端バイナリ変換してデコードだね。
http://www.google.com/search?lr=lang_ja&q=%E6%96 …
この回答への補足
回答ありがとうございます。
一応、'%'を見てバイナリデータに直すところは作ってみました。
そのバイナリデータを、UTF-8→Shift-JISにしたいのです。
多分、UTF-8→Unicode→Shift-JISという流れになると思うのですが、
UTF-8→Unicodeはなんとなく分かるのですが、
Unicode→Shift-JISが全く検討が付かない状態です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 日本語 「文章の使命は読み手に伝わることです。」は悪文ですか? 5 2022/05/14 17:15
- 物理学 プラズマ運転と核融合運転は、違うものなのでしょうか? プラズマ運転と核融合運転は、全く違うものなので 2 2023/04/30 16:34
- サバイバルゲーム このタイプの差し込み口ってなんの種類か分かりますか? 3 2022/07/29 15:32
- ZOZOTOWN このタイプの差し込み口ってなんの種類か分かりますか? 2 2022/07/29 15:31
- Word(ワード) リンクが作動しない 7 2022/12/23 14:15
- その他(占い・超常現象) 五鈷杵付きオニキスと三眼天珠、どっちのブレスレットが良いか? 1 2022/06/25 20:53
- 飲み物・水・お茶 どんな味?でした? 「スコール とちおとめ」 飲んだ方、お願いします。 https://www.go 1 2023/07/17 07:05
- その他(パソコン・スマホ・電化製品) Google ドライブのようにXnBay ストレージ サーバのストレージスペースをコンピュータのエク 2 2023/04/28 19:09
- 工学 プラズマ運転と核融合運転は、違うものなのでしょうか? 1 2023/04/30 10:14
- その他(パソコン・周辺機器) インターフェースがtype-bのタブレットを使っているのですが、以下のようなデバイスはありませんかね 1 2022/06/11 07:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
gccを行ってもexeファイルが生...
-
c言語
-
visual studio 2022でのC#プロ...
-
C# DatagridviewにExcelシート...
-
mallocについて
-
C言語って古いですか?
-
C言語関数違いについて。
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
CPUが16bitでも32bitOSでコンパ...
-
Python、プログラミングについ...
-
だれがとけるの?
-
バッチファイルで以下のような...
-
Notepad++の関数リスト表示の変...
-
VisualStudio2022でC言語プログ...
-
License='MIT' ってなんでmitな...
-
C言語 ストリームについて。
-
c言語でイベントフラグを使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
C++でデスクトップGUIアプリ開...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
C#でログファイルにファイルパ...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
VisualStudioでC++クラスを追加...
-
C言語について。
-
int16_t の _t は何?
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
C言語の関数のextern宣言
-
c言語でイベントフラグを使った...
-
C言語 関数、変数の宣言について
-
[C言語]fputsとfprintfの違い
おすすめ情報