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

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

新規登録して質問してみよう
ただいま回答率
85.30%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

C++

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

Q&A

解決済

1回答

6524閲覧

C++でnlohmann/json.cppを使ってjsonファイルを読み込んでパースすると日本語文字列が文字化けする

RyuL

総合スコア24

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

C++

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

0グッド

0クリップ

投稿2022/07/08 06:38

C++でjsonファイルを読み込んでJSONデータを扱いと思い、ネット上で評判が良かったnlohmannのライブラリを使用してみました。

(URF-8形式で保存されている)jsonファイルからファイルを読み込んで、そのファイル内のJSONデータをパースすることは出来たのですが、データ内の日本語の文字列が文字化けしていました。

色々と試行錯誤した所、その文字化けしたデータをUTF-16形式に変換した所、無事に正しい文字列を取得することが出来ました。
ただUTF-16形式の文字列はu16string型に格納しないといけないらしく、最終的にはstring型(UTF-8)に文字列を格納したいのですが、u16string型をstring型にネットで調べて変換しても、元の文字化けした文字列に戻ってしまいます。
他にやり方を色々調べてもやり方が分かりませんでした。

そもそもなぜJSONの日本語文字列をUTF-16形式に変換しないといけないのか。
ネットでは『JSONはUTF-8のデータだからUTF-16に変換しないといけない』みたいな情報があり、実際にそれを参考にして変換する関数を(コピペして)作り変換してu16string型に格納したのですが、そもそもUTF-8のデータであるのならUTF-8の型であるstring型になぜ正しく格納できないのでしょうか、と疑問に思います。

教えて貰いたいのは、
u16string型から文字化けをせずにstring型に変換するやり方、
もしくは最初からJSONデータを文字化けせずに直接string型に格納するやり方があれば教えて頂きたいです。

以上、よろしくお願いいたします。

開発環境
Visual studio 2019(最新版)

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

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

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

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

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

int32_t

2022/07/08 06:58

文字化けしているということはどうやって確認しましたか? 例: 日本語版Windowsで、コンソールに〜というコードで表示してみた。
RyuL

2022/07/08 07:15

日本語版Windowsで、DXライブラリのDrawStringToHandleで画面に出力をして文字化けを確認しましたし、Visual studioのデバッグツールでプログラムが起動中の変数の中身を直接見ても同様の内容で文字化けが確認できました。
guest

回答1

0

ベストアンサー

おそらくちゃんと UTF-8 の string を得ているのだと思われます。ただ日本語版 Windows で UTF-8 の文字列を表示するのが手間というだけではないでしょうか。

UTF-8に対応してほしい
上記ページが参考にるかもしれません。

投稿2022/07/08 07:28

int32_t

総合スコア21929

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

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

RyuL

2022/07/08 07:45

教えて頂いたサイトページを参考にしたら無事文字化けせずに表示でき、問題が解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問