From 18a6977749ef50bfdd947c9455f65bf17135702a Mon Sep 17 00:00:00 2001 From: John Kerl Date: Mon, 2 May 2022 20:52:34 -0400 Subject: [PATCH] Fix ASCII vs UTF-8 in TSV writer (#1023) * Fix ASCII vs UTF-8 in TSV writer * regression-test case --- internal/pkg/lib/tsv_codec.go | 13 ++++++------- test/cases/io-spec-tsv/0003/cmd | 1 + test/cases/io-spec-tsv/0003/data.json | 7 +++++++ test/cases/io-spec-tsv/0003/experr | 0 test/cases/io-spec-tsv/0003/expout | 2 ++ 5 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 test/cases/io-spec-tsv/0003/cmd create mode 100644 test/cases/io-spec-tsv/0003/data.json create mode 100644 test/cases/io-spec-tsv/0003/experr create mode 100644 test/cases/io-spec-tsv/0003/expout diff --git a/internal/pkg/lib/tsv_codec.go b/internal/pkg/lib/tsv_codec.go index 2320320d0..fabce47c9 100644 --- a/internal/pkg/lib/tsv_codec.go +++ b/internal/pkg/lib/tsv_codec.go @@ -46,22 +46,21 @@ func TSVDecodeField(input string) string { // TSVEncodeField is for the TSV record-writer. func TSVEncodeField(input string) string { var buffer bytes.Buffer - for i := range input { - c := input[i] - if c == '\\' { + for _, r := range input { + if r == '\\' { buffer.WriteByte('\\') buffer.WriteByte('\\') - } else if c == '\n' { + } else if r == '\n' { buffer.WriteByte('\\') buffer.WriteByte('n') - } else if c == '\r' { + } else if r == '\r' { buffer.WriteByte('\\') buffer.WriteByte('r') - } else if c == '\t' { + } else if r == '\t' { buffer.WriteByte('\\') buffer.WriteByte('t') } else { - buffer.WriteByte(c) + buffer.WriteRune(r) } } return buffer.String() diff --git a/test/cases/io-spec-tsv/0003/cmd b/test/cases/io-spec-tsv/0003/cmd new file mode 100644 index 000000000..2819081d3 --- /dev/null +++ b/test/cases/io-spec-tsv/0003/cmd @@ -0,0 +1 @@ +mlr --ijson --otsv cat ${CASEDIR}/data.json diff --git a/test/cases/io-spec-tsv/0003/data.json b/test/cases/io-spec-tsv/0003/data.json new file mode 100644 index 000000000..55dbdbc47 --- /dev/null +++ b/test/cases/io-spec-tsv/0003/data.json @@ -0,0 +1,7 @@ +[ +{ + "alpha": "alpha", + "βετα": "βετα", + "гамма": "гамма" +} +] diff --git a/test/cases/io-spec-tsv/0003/experr b/test/cases/io-spec-tsv/0003/experr new file mode 100644 index 000000000..e69de29bb diff --git a/test/cases/io-spec-tsv/0003/expout b/test/cases/io-spec-tsv/0003/expout new file mode 100644 index 000000000..30d3cbb6a --- /dev/null +++ b/test/cases/io-spec-tsv/0003/expout @@ -0,0 +1,2 @@ +alpha βετα гамма +alpha βετα гамма