From 549ee264a944b27c2af1b1132c022389921f8ed9 Mon Sep 17 00:00:00 2001 From: Fedor Korotkiy Date: Thu, 18 Feb 2021 13:57:48 +0300 Subject: [PATCH] Update utf8 task --- utf8/reverse/README.md | 4 ++-- utf8/reverse/reverse_test.go | 2 +- utf8/spacecollapse/README.md | 4 ++-- utf8/spacecollapse/collapse_test.go | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/utf8/reverse/README.md b/utf8/reverse/README.md index b7ffe7c..4e3a65f 100644 --- a/utf8/reverse/README.md +++ b/utf8/reverse/README.md @@ -5,8 +5,8 @@ Функция принимает на вход юникодную строку и должна возвращать строку, состоящую из тех же юникодных рун, но записанных в обратном порядке. -Если строка содержит последовательность байт, не образующую корректный utf8, нужно развернуть -эту последовательность как отдельные байты. +Каждый байт входной строки, который не образует корректную utf8 последовательность, нужно +заменить на unicode replacement character. Обратите внимание в тестах, что некоторые графемы распадаются при обращении строки. Данный эффект связан с тем, что в юникоде некоторые руны умеют комбинироваться в одну графему. diff --git a/utf8/reverse/reverse_test.go b/utf8/reverse/reverse_test.go index d7901b6..cecf40c 100644 --- a/utf8/reverse/reverse_test.go +++ b/utf8/reverse/reverse_test.go @@ -37,7 +37,7 @@ func TestReverse(t *testing.T) { {input: "🇩🇪", output: "🇪🇩"}, // NB: Флаг распался. :) {input: "🏳️‍🌈", output: "🌈‍️🏳"}, - {input: "\xff\x00\xff\x00", output: "\x00\xff\x00\xff"}, + {input: "\xff\x00\xff\x00", output: "\x00\xef\xbf\xbd\x00\xef\xbf\xbd"}, } { t.Run(fmt.Sprintf("#%v: %v", i, tc.input), func(t *testing.T) { require.Equal(t, tc.output, Reverse(tc.input)) diff --git a/utf8/spacecollapse/README.md b/utf8/spacecollapse/README.md index e61478e..9cf5d7f 100644 --- a/utf8/spacecollapse/README.md +++ b/utf8/spacecollapse/README.md @@ -5,8 +5,8 @@ Функция принимает на вход юникодную строку и должна возвращать строку, состоящую из тех же символов, но где все подряд идущие группы пробельных символов заменены на ' ' (один обычный пробел). -Некорректную utf8 последовательность функция должна оставлять без изменений. - +Каждый байт входной строки, который не образует корректную utf8 последовательность, нужно +заменить на unicode replacement character. ## Примеры Как запустить все тесты: diff --git a/utf8/spacecollapse/collapse_test.go b/utf8/spacecollapse/collapse_test.go index 1d3f208..b692a09 100644 --- a/utf8/spacecollapse/collapse_test.go +++ b/utf8/spacecollapse/collapse_test.go @@ -22,7 +22,7 @@ func TestCollapseSpaces(t *testing.T) { {input: "\t*", output: " *"}, {input: " \t \t ", output: " "}, {input: " \tx\t ", output: " x "}, - {input: "\xff\x00\xff\x00", output: "\xff\x00\xff\x00"}, + {input: "\xff\x00 \xff\x00", output: "\xef\xbf\xbd\x00 \xef\xbf\xbd\x00"}, } { t.Run(fmt.Sprintf("#%v: %v", i, tc.input), func(t *testing.T) { require.Equal(t, tc.output, CollapseSpaces(tc.input))