Go - 如何 decode/convert 将包含十六进制字符的 txt 文件转换为可读字符串
Go - How to decode/convert a txt file contains hex chars into readable string
我有一个日志文件,其中每一行都是 JSON。由于某些 Nginx 安全原因,日志以十六进制格式保存(例如,char " 将被转换为 \x22)。这是 JSON 行的示例:
{ "body_bytes_sent": "474", "params": {\x22device_id\x22: \x221234567890\x22} }
我的目标:
- 逐行读取文件。
将每行转换为可读格式
{ "body_bytes_sent": "474", "params" : {"device_id": "1234567890"} }
将此字符串转换为 JSON 对象以便我可以对其进行操作。
任何帮助将不胜感激。
您可以使用 strconv.Unquote
将字符串转换为普通字符串:
package main
import (
"encoding/json"
"fmt"
"strconv"
)
func main() {
// this is what your input string looks like...
qs := "{\x22device_id\x22: \x221234567890\x22}"
// now let's convert it to a normal string
// note that it has to look like a Go string literal so we're
// using Sprintf
s, err := strconv.Unquote(fmt.Sprintf(`"%s"`, qs))
if err != nil {
panic(err)
}
fmt.Println(s)
// just for good measure, let's see if it can actually be decoded.
// SPOILER ALERT: It decodes just fine!
var v map[string]interface{}
if err := json.Unmarshal([]byte(s), &v); err != nil {
panic(err)
}
fmt.Println(v)
}
我有一个日志文件,其中每一行都是 JSON。由于某些 Nginx 安全原因,日志以十六进制格式保存(例如,char " 将被转换为 \x22)。这是 JSON 行的示例:
{ "body_bytes_sent": "474", "params": {\x22device_id\x22: \x221234567890\x22} }
我的目标:
- 逐行读取文件。
将每行转换为可读格式
{ "body_bytes_sent": "474", "params" : {"device_id": "1234567890"} }
将此字符串转换为 JSON 对象以便我可以对其进行操作。
任何帮助将不胜感激。
您可以使用 strconv.Unquote
将字符串转换为普通字符串:
package main
import (
"encoding/json"
"fmt"
"strconv"
)
func main() {
// this is what your input string looks like...
qs := "{\x22device_id\x22: \x221234567890\x22}"
// now let's convert it to a normal string
// note that it has to look like a Go string literal so we're
// using Sprintf
s, err := strconv.Unquote(fmt.Sprintf(`"%s"`, qs))
if err != nil {
panic(err)
}
fmt.Println(s)
// just for good measure, let's see if it can actually be decoded.
// SPOILER ALERT: It decodes just fine!
var v map[string]interface{}
if err := json.Unmarshal([]byte(s), &v); err != nil {
panic(err)
}
fmt.Println(v)
}