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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

UTF-8

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

3回答

2362閲覧

jsonっぽい文字列データからのデコードについて

oldstance

総合スコア11

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

UTF-8

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

1グッド

0クリップ

投稿2020/02/10 07:57

またご利用させていただきます。

とあるAPIを叩くと、以下の文字列が返ってくるとします。

["\u3053\u3093\u306b\u3061\u306f\u3002"]

これはUTF-16の文字列を表しています(「こんにちは。」と書かれています)。
お聞きしたいのは、上記文字列を人間が理解できる文字列に変換したい、ということです(つまり、「こんにちは。」という、文字列を得たい)。

言語はC#です。

string message = getMessage( "上記の16進文字列" );

のようにできれば最高なのですが、方法がわかりません。
ご教授のほど、お願い致します。

TN8001👍を押しています

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

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

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

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

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

Zuishin

2020/02/10 08:05

上記はリテラルの話だけでした。文字列の取り得る値によってもかわってきますが、私なら正規表現でコールバックを使った置換が真っ先に思い浮かびます。
oldstance

2020/02/10 08:08

Zuishin様、有難うございます。が、上記urlにかかれていることはあまり理解できませんでした。 正規表現でcallbackというのはどういう感じになるのでしょうか。お時間取らせてしまい申し訳有りません。
Zuishin

2020/02/10 08:30 編集

他の回答者さんが色々回答してくれると思います。その中にはこれの解説もあるかもしれませんし、もっと良い方法もあるかもしれません。もし時間が経っても求める回答が無かったら回答します。
guest

回答3

0

ベストアンサー

こんな感じでしょうか。

cs

1string s = "[\"\u3053\u3093\u306b\u3061\u306f\u3002\"]"; 2string message = System.Text.RegularExpressions.Regex.Unescape(s); 3System.Diagnostics.Debug.WriteLine(message); // ["こんにちは。"] 4message = message.Trim('[', '"', ']'); 5System.Diagnostics.Debug.WriteLine(message); // こんにちは。

投稿2020/02/10 08:34

編集2023/07/18 22:16
TN8001

総合スコア9862

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

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

oldstance

2020/02/10 08:50

申し訳有りません。APIを叩いて返ってきた文字列を変更することは禁じられています。 確かに正規表現を使うのが正解かと思います。しかし、私にはその答えを導き出せていないのです。
TN8001

2020/02/10 08:54

string sが返ってきた文字列のつもりなのですが、うまくいきませんか?
oldstance

2020/02/10 09:06

確認しました。両端のトリミングも行われていて、期待通りの結果となりました。皆様大変有り難うございます。貴重なお時間割いていただいて有難うございました。
guest

0

こういうこと?

C#

1string message = "\u3053\u3093\u306b\u3061\u306f\u3002"; 2Console.WriteLine(message);

投稿2020/02/10 08:34

YAmaGNZ

総合スコア10489

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

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

oldstance

2020/02/10 08:53

有難うございます。確かに目的の人間が理解できる文字列を得ることが出来るのですが、APIを叩いて返ってきた文字列を変更することが禁じられています。申し訳有りません。
guest

0

utf-16 を utf-8 にしたいということでしょうか?
C#でUTF-16をUTF-8に変換

投稿2020/02/10 08:22

papinianus

総合スコア12705

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

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

oldstance

2020/02/10 08:30

それでも構わないのですが、まずは既にUTF-16になっている文字列([~]内の16進数文字列)を、人間の理解できる文字「こんにちは。」と取得したいのです。
papinianus

2020/02/10 08:36

\u を削って、2 文字ずつ区切って、それをバイト値に変換したうえで、Encoding.GetEncoding().GetString() にかければ文字列になりませんか? リンク先のコードを途中できれば↑が実現できると思いますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問