Skip to content

Commit 4e83b06

Browse files
committed
Add helper to read utf-16 encoded files in windows
Windows ini files are UTF-16LE encoded
1 parent 97b193a commit 4e83b06

File tree

12 files changed

+3294
-0
lines changed

12 files changed

+3294
-0
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ require (
2424
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8
2525
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4
2626
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7
27+
golang.org/x/text v0.3.0
2728
gopkg.in/AlecAivazis/survey.v1 v1.8.5
2829
howett.net/plist v0.0.0-20181124034731-591f970eefbb
2930
)

pkg/os/util_windows.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package os
2+
3+
import (
4+
"bytes"
5+
"io/ioutil"
6+
7+
"golang.org/x/text/encoding/unicode"
8+
"golang.org/x/text/transform"
9+
)
10+
11+
// ReadFileUTF16LE reads a UTF-16LE file and returns in a []byte
12+
// ini/inf files in windows are of this format, reading a UTF-16
13+
// file directly without this would result in malformed texts
14+
func ReadFileUTF16LE(filename string) ([]byte, error) {
15+
// Read the file into a []byte
16+
raw, err := ioutil.ReadFile(filename)
17+
if err != nil {
18+
return nil, err
19+
}
20+
21+
// Make an tranformer that converts MS-Win default to UTF8
22+
win16le := unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM)
23+
// Make a transformer that is like win16le, but abides by BOM
24+
utf16bom := unicode.BOMOverride(win16le.NewDecoder())
25+
26+
// Make a Reader that uses utf16bom
27+
unicodeReader := transform.NewReader(bytes.NewReader(raw), utf16bom)
28+
decoded, err := ioutil.ReadAll(unicodeReader)
29+
return decoded, err
30+
}

vendor/golang.org/x/text/encoding/encoding.go

Lines changed: 335 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)