690531c87e
* moved sample programs to examples directory * cleaned up make make file * converter.go: ConvertString now uses Convert under the hood, removes some code duplication * reader.go: No need to have two separate buffers, can write directly in to buffer given in Read call. Simplifies code greatly
107 lines
3.6 KiB
Go
107 lines
3.6 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/hex"
|
|
"io/ioutil"
|
|
"iconv"
|
|
"fmt"
|
|
"os"
|
|
)
|
|
|
|
func main() {
|
|
// read bytes from sample.utf8
|
|
utf8Bytes, err := ioutil.ReadFile("sample.utf8")
|
|
|
|
if (err != nil) {
|
|
fmt.Println("Could not open 'sample.utf8': ", err)
|
|
}
|
|
|
|
// read bytes from sample.ebcdic-us
|
|
ebcdicBytes, err := ioutil.ReadFile("sample.ebcdic-us")
|
|
|
|
if err != nil {
|
|
fmt.Println("Could not open 'sample.ebcdic-us': ", err)
|
|
}
|
|
|
|
// use iconv to check conversions both ways
|
|
utf8String := string(utf8Bytes)
|
|
ebcdicString := string(ebcdicBytes)
|
|
|
|
// convert from utf-8 to ebcdic
|
|
utf8ConvertedString, err := iconv.ConvertString(utf8String, "utf-8", "ebcdic-us")
|
|
|
|
if err != nil || ebcdicString != utf8ConvertedString {
|
|
// generate hex string
|
|
ebcdicHexString := hex.EncodeToString(ebcdicBytes)
|
|
utf8ConvertedHexString := hex.EncodeToString([]byte(utf8ConvertedString))
|
|
|
|
fmt.Println("utf-8 was not properly converted to ebcdic-us by iconv.ConvertString, error: ", err)
|
|
fmt.Println(ebcdicHexString, " - ", len(ebcdicString))
|
|
fmt.Println(utf8ConvertedHexString, " - ", len(utf8ConvertedString))
|
|
} else {
|
|
fmt.Println("utf-8 was properly converted to ebcdic-us by iconv.ConvertString")
|
|
}
|
|
|
|
// convert from ebcdic to utf-8
|
|
ebcdicConvertedString, err := iconv.ConvertString(ebcdicString, "ebcdic-us", "utf-8")
|
|
|
|
if err != nil || utf8String != ebcdicConvertedString {
|
|
// generate hex string
|
|
utf8HexString := hex.EncodeToString(utf8Bytes)
|
|
ebcdicConvertedHexString := hex.EncodeToString([]byte(ebcdicConvertedString))
|
|
|
|
fmt.Println("ebcdic-us was not properly converted to utf-8 by iconv.ConvertString, error: ", err)
|
|
fmt.Println(utf8HexString, " - ", len(utf8String))
|
|
fmt.Println(ebcdicConvertedHexString, " - ", len(ebcdicConvertedString))
|
|
} else {
|
|
fmt.Println("ebcdic-us was properly converted to utf-8 by iconv.ConvertString")
|
|
}
|
|
|
|
testBuffer := make([]byte, len(ebcdicBytes) * 2)
|
|
|
|
// convert from ebdic bytes to utf-8 bytes
|
|
bytesRead, bytesWritten, err := iconv.Convert(ebcdicBytes, testBuffer, "ebcdic-us", "utf-8")
|
|
|
|
if err != nil || bytesRead != len(ebcdicBytes) || bytesWritten != len(utf8Bytes) {
|
|
fmt.Println("ebcdic-us was not properly converted to utf-8 by iconv.Convert, error: ", err)
|
|
} else {
|
|
fmt.Println("ebcdic-us was properly converted to utf-8 by iconv.Convert")
|
|
}
|
|
|
|
// convert from utf-8 bytes to ebcdic bytes
|
|
bytesRead, bytesWritten, err = iconv.Convert(utf8Bytes, testBuffer, "utf-8", "ebcdic-us")
|
|
|
|
if err != nil || bytesRead != len(utf8Bytes) || bytesWritten != len(ebcdicBytes) {
|
|
fmt.Println("utf-8 was not properly converted to ebcdic-us by iconv.Convert, error: ", err)
|
|
} else {
|
|
fmt.Println("utf-8 was properly converted to ebcdic-us by iconv.Convert")
|
|
}
|
|
|
|
// test iconv.Reader
|
|
utf8File,_ := os.Open("sample.utf8", os.O_RDONLY, 0)
|
|
utf8Reader,_ := iconv.NewReader(utf8File, "utf-8", "ebcdic-us")
|
|
bytesRead, err = utf8Reader.Read(testBuffer)
|
|
|
|
if err != nil || bytesRead != len(ebcdicBytes) {
|
|
fmt.Println("utf8 was not properly converted to ebcdic-us by iconv.Reader", err)
|
|
} else {
|
|
fmt.Println("utf8 was property converted to ebcdic-us by iconv.Reader")
|
|
}
|
|
|
|
ebcdicFile,_ := os.Open("sample.ebcdic-us", os.O_RDONLY, 0)
|
|
ebcdicReader,_ := iconv.NewReader(ebcdicFile, "ebcdic-us", "utf-8")
|
|
bytesRead, err = ebcdicReader.Read(testBuffer)
|
|
|
|
if err != nil || bytesRead != len(utf8Bytes) {
|
|
fmt.Println("ebcdic-us was not properly converted to utf-8 by iconv.Reader: ", err)
|
|
|
|
if bytesRead > 0 {
|
|
fmt.Println(string(testBuffer[:bytesRead]))
|
|
fmt.Println(hex.EncodeToString(testBuffer[:bytesRead]))
|
|
fmt.Println(hex.EncodeToString(utf8Bytes))
|
|
}
|
|
} else {
|
|
fmt.Println("ebcdic-us was properly converted to utf-8 by iconv.Reader")
|
|
}
|
|
}
|