|
- package main
-
- import (
- "encoding/hex"
- "fmt"
- "iconv"
- "io/ioutil"
- "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")
- 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")
- 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")
- }
- }
|