diff options
| author | qmuntal <quimmuntal@gmail.com> | 2023-05-05 18:17:18 +0200 |
|---|---|---|
| committer | Quim Muntal <quimmuntal@gmail.com> | 2023-05-15 09:26:16 +0000 |
| commit | 974236bda9b9aad87b4b10ec9af2cc01b14e382f (patch) | |
| tree | 321cb16cc9fc2eec78fc81060ff64db06115a544 /src/os/exec | |
| parent | 91b8cc0dfaae12af1a89e2b7ad3da10728883ee1 (diff) | |
| download | go-974236bda9b9aad87b4b10ec9af2cc01b14e382f.tar.xz | |
os, syscall: support ill-formed UTF-16 strings on Windows
Windows UTF-16 strings can contain unpaired surrogates, which can't be
decoded into a valid UTF-8 string. This file defines a set of functions
that can be used to encode and decode potentially ill-formed UTF-16
strings by using the
[the WTF-8 encoding](https://simonsapin.github.io/wtf-8/).
WTF-8 is a strict superset of UTF-8, i.e. any string that is
well-formed in UTF-8 is also well-formed in WTF-8 and the content
is unchanged. Also, the conversion never fails and is lossless.
The benefit of using WTF-8 instead of UTF-8 when decoding a UTF-16
string is that the conversion is lossless even for ill-formed
UTF-16 strings. This property allows to read an ill-formed UTF-16
string, convert it to a Go string, and convert it back to the same
original UTF-16 string.
Fixes #59971
Change-Id: Id6007f6e537844913402b233e73d698688cd5ba6
Reviewed-on: https://go-review.googlesource.com/c/go/+/493036
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Run-TryBot: Quim Muntal <quimmuntal@gmail.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Paul Hampson <Paul.Hampson@Pobox.com>
Diffstat (limited to 'src/os/exec')
| -rw-r--r-- | src/os/exec/lp_windows_test.go | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/src/os/exec/lp_windows_test.go b/src/os/exec/lp_windows_test.go index 50d522948a..4d85a5f415 100644 --- a/src/os/exec/lp_windows_test.go +++ b/src/os/exec/lp_windows_test.go @@ -587,7 +587,6 @@ package main import ( "os" "syscall" - "unicode/utf16" "unsafe" ) @@ -599,7 +598,7 @@ func getMyName() (string, error) { if n == 0 { return "", err } - return string(utf16.Decode(b[0:n])), nil + return syscall.UTF16ToString(b[0:n]), nil } func main() { |
