Skip to content

Commit

Permalink
parse xml using the encoding declared in xml header
Browse files Browse the repository at this point in the history
  • Loading branch information
mayswind committed Oct 30, 2024
1 parent ce8c020 commit 5006a96
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 12 deletions.
7 changes: 4 additions & 3 deletions pkg/converters/gnucash/gnucash_data_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@ import (
"compress/gzip"
"encoding/xml"

"golang.org/x/net/html/charset"

"github.com/mayswind/ezbookkeeping/pkg/core"
"github.com/mayswind/ezbookkeeping/pkg/errs"
"github.com/mayswind/ezbookkeeping/pkg/utils"
)

// gnucashDatabaseReader defines the structure of gnucash database reader
Expand Down Expand Up @@ -37,14 +38,14 @@ func createNewGnuCashDatabaseReader(data []byte) (*gnucashDatabaseReader, error)
}

xmlDecoder := xml.NewDecoder(gzipReader)
xmlDecoder.CharsetReader = utils.IdentReader
xmlDecoder.CharsetReader = charset.NewReaderLabel

return &gnucashDatabaseReader{
xmlDecoder: xmlDecoder,
}, nil
} else if len(data) > 5 && data[0] == 0x3C && data[1] == 0x3F && data[2] == 0x78 && data[3] == 0x6D && data[4] == 0x6C { // <?xml
xmlDecoder := xml.NewDecoder(bytes.NewReader(data))
xmlDecoder.CharsetReader = utils.IdentReader
xmlDecoder.CharsetReader = charset.NewReaderLabel

return &gnucashDatabaseReader{
xmlDecoder: xmlDecoder,
Expand Down
7 changes: 4 additions & 3 deletions pkg/converters/ofx/ofx_data_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ import (
"bytes"
"encoding/xml"

"golang.org/x/net/html/charset"

"github.com/mayswind/ezbookkeeping/pkg/core"
"github.com/mayswind/ezbookkeeping/pkg/errs"
"github.com/mayswind/ezbookkeeping/pkg/utils"
)

// ofxFileReader defines the structure of open financial exchange (ofx) file reader
Expand All @@ -30,7 +31,7 @@ func (r *ofxFileReader) read(ctx core.Context) (*ofxFile, error) {
func createNewOFXFileReader(data []byte) (*ofxFileReader, error) {
if len(data) > 5 && data[0] == 0x3C && data[1] == 0x3F && data[2] == 0x78 && data[3] == 0x6D && data[4] == 0x6C { // ofx 2.x starts with <?xml
xmlDecoder := xml.NewDecoder(bytes.NewReader(data))
xmlDecoder.CharsetReader = utils.IdentReader
xmlDecoder.CharsetReader = charset.NewReaderLabel

return &ofxFileReader{
xmlDecoder: xmlDecoder,
Expand All @@ -39,7 +40,7 @@ func createNewOFXFileReader(data []byte) (*ofxFileReader, error) {

} else if len(data) > 5 && string(data[0:5]) == "<OFX>" { // no ofx header
xmlDecoder := xml.NewDecoder(bytes.NewReader(data))
xmlDecoder.CharsetReader = utils.IdentReader
xmlDecoder.CharsetReader = charset.NewReaderLabel

return &ofxFileReader{
xmlDecoder: xmlDecoder,
Expand Down
4 changes: 3 additions & 1 deletion pkg/exchangerates/national_bank_of_poland_datasource.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (
"math"
"time"

"golang.org/x/net/html/charset"

"github.com/mayswind/ezbookkeeping/pkg/core"
"github.com/mayswind/ezbookkeeping/pkg/errs"
"github.com/mayswind/ezbookkeeping/pkg/log"
Expand Down Expand Up @@ -128,7 +130,7 @@ func (e *NationalBankOfPolandDataSource) Parse(c core.Context, content []byte) (
nationalBankOfPolandData := &NationalBankOfPolandExchangeRateData{}

xmlDecoder := xml.NewDecoder(bytes.NewReader(content))
xmlDecoder.CharsetReader = utils.IdentReader
xmlDecoder.CharsetReader = charset.NewReaderLabel
err := xmlDecoder.Decode(&nationalBankOfPolandData)

if err != nil {
Expand Down
5 changes: 0 additions & 5 deletions pkg/utils/io.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,3 @@ func GetFileNameExtension(path string) string {

return extension[1:]
}

// IdentReader returns the original io reader
func IdentReader(encoding string, input io.Reader) (io.Reader, error) {
return input, nil
}

0 comments on commit 5006a96

Please sign in to comment.