kopia lustrzana https://github.com/jcs/id3-go
Remove dependency on iconv with the help of @mmorton's patches
rodzic
db0dbebd68
commit
4436e8a5ab
|
@ -0,0 +1,78 @@
|
|||
package encodedbytes
|
||||
|
||||
import (
|
||||
"golang.org/x/text/transform"
|
||||
"golang.org/x/text/encoding"
|
||||
"golang.org/x/text/encoding/charmap"
|
||||
"golang.org/x/text/encoding/unicode"
|
||||
"bytes"
|
||||
"io/ioutil"
|
||||
)
|
||||
|
||||
type (
|
||||
Converter struct {
|
||||
from string
|
||||
to string
|
||||
}
|
||||
)
|
||||
|
||||
func resolveEncoding(b []byte, name string) encoding.Encoding {
|
||||
switch name {
|
||||
case "UTF-8":
|
||||
return nil
|
||||
case "UTF-16":
|
||||
if b == nil || len(b) < 2 {
|
||||
return unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM)
|
||||
} else if b[0] == 0xFE && b[1] == 0xFF {
|
||||
return unicode.UTF16(unicode.BigEndian, unicode.ExpectBOM)
|
||||
} else if b[0] == 0xFF && b[1] == 0xFE {
|
||||
return unicode.UTF16(unicode.LittleEndian, unicode.ExpectBOM)
|
||||
} else {
|
||||
return unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM)
|
||||
}
|
||||
case "UTF-16LE":
|
||||
return unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM)
|
||||
case "UTF-16BE":
|
||||
return unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM)
|
||||
case "ISO-8859-1":
|
||||
return charmap.Windows1252
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c Converter) ConvertString(s string) (string, error) {
|
||||
var native []byte
|
||||
|
||||
b := []byte(s)
|
||||
|
||||
fromEncoding := resolveEncoding(b, c.from)
|
||||
if fromEncoding != nil {
|
||||
in := bytes.NewReader(b)
|
||||
reader := transform.NewReader(in, fromEncoding.NewDecoder())
|
||||
n, err := ioutil.ReadAll(reader)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
native = n
|
||||
} else {
|
||||
native = b
|
||||
}
|
||||
|
||||
toEncoding := resolveEncoding(nil, c.to)
|
||||
if toEncoding != nil {
|
||||
out := &bytes.Buffer{}
|
||||
writer := transform.NewWriter(out, toEncoding.NewEncoder())
|
||||
defer writer.Close()
|
||||
_, err := writer.Write(native)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(out.Bytes()), nil
|
||||
} else {
|
||||
return string(native), nil
|
||||
}
|
||||
}
|
||||
|
||||
func NewConverter(from string, to string) (*Converter, error) {
|
||||
return &Converter{from:from, to:to}, nil
|
||||
}
|
|
@ -6,7 +6,6 @@ package encodedbytes
|
|||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
iconv "github.com/djimenez/iconv-go"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -28,15 +27,15 @@ var (
|
|||
{Name: "UTF-16BE", NullLength: 2},
|
||||
{Name: "UTF-8", NullLength: 1},
|
||||
}
|
||||
Decoders = make([]*iconv.Converter, len(EncodingMap))
|
||||
Encoders = make([]*iconv.Converter, len(EncodingMap))
|
||||
Decoders = make([]*Converter, len(EncodingMap))
|
||||
Encoders = make([]*Converter, len(EncodingMap))
|
||||
)
|
||||
|
||||
func init() {
|
||||
n := EncodingForIndex(NativeEncoding)
|
||||
for i, e := range EncodingMap {
|
||||
Decoders[i], _ = iconv.NewConverter(e.Name, n)
|
||||
Encoders[i], _ = iconv.NewConverter(n, e.Name)
|
||||
Decoders[i], _ = NewConverter(e.Name, n)
|
||||
Encoders[i], _ = NewConverter(n, e.Name)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ func TestOpen(t *testing.T) {
|
|||
actual := resultFrame.Description()
|
||||
|
||||
if expected != actual {
|
||||
t.Errorf("Expected %q, got %q", expected, actual)
|
||||
t.Errorf("Expected %x, got %x", expected, actual)
|
||||
}
|
||||
|
||||
actual = resultFrame.Text()
|
||||
|
|
|
@ -8,7 +8,7 @@ import (
|
|||
"encoding/binary"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/mikkyang/id3-go/encodedbytes"
|
||||
"github.com/jcs/id3-go/encodedbytes"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -5,7 +5,7 @@ package v2
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/mikkyang/id3-go/encodedbytes"
|
||||
"github.com/jcs/id3-go/encodedbytes"
|
||||
"io"
|
||||
"os"
|
||||
)
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
package v2
|
||||
|
||||
import (
|
||||
"github.com/mikkyang/id3-go/encodedbytes"
|
||||
"github.com/jcs/id3-go/encodedbytes"
|
||||
"io"
|
||||
)
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
package v2
|
||||
|
||||
import (
|
||||
"github.com/mikkyang/id3-go/encodedbytes"
|
||||
"github.com/jcs/id3-go/encodedbytes"
|
||||
"io"
|
||||
)
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue