質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

9502閲覧

C++でUTF8のcsvファイルを作りたいです.

DNNTECH

総合スコア12

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2018/04/03 09:05

前提・実現したいこと

こんにちは.初めてこちらで質問いたします.C++プログラミング初心者です.
C++でcsvファイルをutf8形式で出力したいのですが,わからなくて困っています.
変換コードの載っているサイトをいくつか見ましたが,ファイルを出力しているものが見つからなかったので,
お分かりになりましたら,教えていただけますでしょうか.

該当のソースコード

C++

1 sprintf_s(RE, sizeof(RE), "res_%s_cal_%d.csv", CD1, k+1); 2 if (fopen_s(&fp, RE, "w")!=NULL){ 3 printf("出力ファイル %s を開けません\n", RE); 4 }else{ 5 for(i=0; i<MEL_FILTERBANK; i++){ 6 fprintf(fp, "%10.5f,\n", out[i][1]); 7 }

補足情報

配列outに入っている数値(double型)をutf8形式にしたいです.SonyのNeural Network Consoleで使うために必要です.
文章不足かもしれませんが,よろしくお願いいたします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

deadjupiter

2018/04/03 09:10

何が分からないわけ?
guest

回答3

0

生成したファイルと変換したファイルを見比べてみてはいかがでしょうか?

なんとなく
fprintf(fp, "%10.5f,\n", out[i][1]);

fprintf(fp, "%.5f\n", out[i][1]);
なのではないかと思います

投稿2018/04/03 10:30

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DNNTECH

2018/04/03 10:37

ありがとうございます.試してみます. 変換後のファイルと生成したファイルは,見た目が同じでした.どちらもexcelのcsvファイルで見ています.
asm

2018/04/03 10:38

テキストもしくはバイナリファイルとして見ると違いがあるかもしれません。
DNNTECH

2018/04/03 10:46

メモ帳で確認したら違いました! メモ帳で比較して見ると教えていただいたコードで実行した結果が読み込み可能なファイルと同じになりました!! ありがとうございます.
guest

0

配列outに入っている数値(double型)をutf8形式にしたいです.

何もしなくて構いません。ASCIIの範囲の文字列(-0123456789.,を含む)は、ASCIIで書いてもUTF-8として書いても、全く同じデータとなります

投稿2018/04/03 09:11

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DNNTECH

2018/04/03 09:20

変換する必要はないということですが,上記コードで作成したcsvファイルを別アプリでUTF8に変換しないとSonyのアプリで読み込めない状態でした.ご丁寧に回答いただきありがとうございます.
guest

0

ベストアンサー

数字とアルファベットだけなら、そのままでUTF8と同じになりますね


そもそも文字コードが問題になるのは、いわゆる全角文字となります。
それも、ソースをUTF8で記述していれば、そこでの変換の必要はでてきません。
外部からデータを読むとかする場合には、そこでの文字コードと変換を考えんといけませんが。

投稿2018/04/03 09:11

編集2018/04/03 09:14
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DNNTECH

2018/04/03 09:18

C++ではない外部アプリで読み込んでいるので,変換が必要になっているということですね. ありがとうございます.
y_waiwai

2018/04/03 09:19

まあ、その外部アプリの文字コードがなにかを調べる必要がありますね。 それがUTF8なら苦労はいらないですが。
DNNTECH

2018/04/03 09:26

C++で作ったファイルはexcelのcsvファイルになっています.それをSonyのアプリに読ませたいのですが,一度,OpenOfficeというアプリでexcelのcsvファイルの文字コードをWindows932からUTF8に変換させているといったところです.至らない説明で申し訳ございません.
y_waiwai

2018/04/03 09:33

Windows932というのは、ShiftJISということですので、 「c++ sjis utf-8 変換」でぐぐるといろいろ変換例の解説が出てくると思います ここら辺読んだ上で、なお疑問がある場合は聞いてください
DNNTECH

2018/04/04 02:24

教えていただいたワードで検索してみました.どうもexcelで書き出すとBOM付きのcsv(utf8)になるみたいです.今はBOM無しのcsv(utf8)の書き出し方をいくつかのウェブサイトで調べていますが,ご存知でしたら教えてくださいませんか?
y_waiwai

2018/04/04 03:58

BOMというのはファイルの先頭に2バイト付いてるデータの話です、 なので、BOM付きのファイルの先頭2バイト削除すればBOM無しとなります
DNNTECH

2018/04/04 06:27

いろいろ教えていただきましてありがとうございました.
y_waiwai

2018/04/04 06:31

まあ、逆に言うと、ファイルを読み込んだときに、先頭2バイトがBOMかそうでないかを判断し、BOMと判明すればその2バイトを読み飛ばす(あるいは無視する)処理をすればいいということですね
DNNTECH

2018/04/04 09:20

おっしゃっている内容はわかりますが,なんせC++初心者なので技術不足を感じています.現在はseek関数を使ってそれができないか模索しているのですが,seek関数よりも簡易な方法をご存知ではないですか?
y_waiwai

2018/04/04 09:32

あ、すみません、UTF8のBOMは3バイトですね http://uxmilk.jp/48923 seek関数でするのがいいと思いますが、難しいと言うなら、十分な大きさの配列用意しといて、一気に全部読み込んでしまうというのはどうでしょう。 元データの大きさがある程度見積もり立てばの話となりますが
DNNTECH

2018/04/04 09:49

参考URLのご提供ありがとうございます. seekに関しては使い方がわかってきました.しかし,txtファイルだと使えるのですがcsvファイルだと使えずコンパイルエラーになってしまいます.
y_waiwai

2018/04/04 09:54

ファイル名が変わるだけの話なんで、コンパイルエラーってのは起こらんはずだけど。 エラー行(の周辺)を出していただければ
DNNTECH

2018/04/04 09:58

1> main.cpp 1>main.cpp(7): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdio.h(234) : 'fopen' の宣言を確認してください。 上記がエラー行です.よろしくお願いします.
y_waiwai

2018/04/04 10:22

ああ、それはワーニング(警告)なので、それで実行ファイルはできているはずです fopen は推奨されない関数だから fopen_s を使えって話ですね
DNNTECH

2018/04/05 00:59

ありがとうございます.csvも読み込みができました. BOMの有無判定のプログラムやその先のことで行き詰まったら,コードなどを載せてまた質問を作ります. わかることでしたらまたお力添えいただきたいです!! PS.フォローさせていただきます.よろしくお願いします.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問