金魚亭日常

読書,ガジェット,競技プログラミング

Go の ファイルから読み込んだ Unicode コードポイント文字列の Unquote

これの話

str := "\u3053\u3093\u306b\u3061\u306f\uff0c\u4e16\u754c\uff01"
fmt.Println(str)
// こんにちは,世界!

だが,

str := `\u3053\u3093\u306b\u3061\u306f\uff0c\u4e16\u754c\uff01`
fmt.Println(str)
// \u3053\u3093\u306b\u3061\u306f\uff0c\u4e16\u754c\uff01

なので,ダブルクオートで囲ってから,strconv.Unquote() を使うと,

str := `\u3053\u3093\u306b\u3061\u306f\uff0c\u4e16\u754c\uff01`
unquoted, _ := strconv.Unquote(`"` + str + `"`)
fmt.Println(str)
// こんにちは,世界!

となる.

ファイルから読む場合,

f, _ := ioutil.ReadFile("text.txt")
str := strings.TrimRight(string(f), "\n")
unquoted, _ := strconv.Unquote(`"` + str + `"`)

という順番.

StringIO 的にやるには,

f := bytes.NewBufferString(`\u3053\u3093\u306b\u3061\u306f\uff0c\u4e16\u754c\uff01`).Bytes()
str := strings.TrimRight(string(f), "\n")
unquoted, _ := strconv.Unquote(`"` + str + `"`)

でいいと思われる.