当前位置: 首页 > 面试题库 >

通过TCP读取字节并在Go中编码为ISO-8859-9

张英范
2023-03-14
问题内容

我是Golang的新手。我正在开发一种通过TCP从远程地址读取字节的服务。问题是我无法更改读取的字节的编码。我想将读取的字节转换为ISO-8859-9字符串。这是阅读代码的一部分。

 conn, err := net.Dial("tcp", constant.ConnectHost+":"+constant.ConnectPort)
 checkError(err)
 defer conn.Close()

 reader := bufio.NewReader(conn)
 textproc := textproto.NewReader(reader)

 bytes, err := textproc.R.ReadBytes(constant.EndTextDelimiter)
 checkError(err)
 msg := string(bytes[:])

代码工作正常。但是编码与我想要的不同。这是接受服务的问题。有什么建议吗?


问题答案:

charmap.ISO8859_9.NewEncoder()。Bytes()函数要使用UTF-8格式进行编码。尝试对字节进行编码时出现错误。因为我的传入字节是8859-9格式,所以我试图直接将它们转换。首先,我将字节解码为UTF-8格式。我做了我的过程,最后我使用编码器将此UTF-8字节编码为ISO8859-9
unicode。这是新代码

//main package
bytes, err := textproc.R.ReadBytes(constant.EndTextDelimiter)
checkError(err)
msg := encoder.DecodeISO8859_9ToUTF8(bytes)
//..........
// Process that string, create struct Then convert struct to json bytes
// Then encode that bytes
json := encoder.EncodeUTF8ToISO8859_9(bytes)

//encoder package
package encoder
import "golang.org/x/text/encoding/charmap"

func DecodeISO8859_9ToUTF8(bytes []byte) string {
    encoded, _ := charmap.ISO8859_9.NewDecoder().Bytes(bytes)
    return string(encoded[:])
}

func EncodeUTF8ToISO8859_9(bytes []byte) string {
    encoded, _ := charmap.ISO8859_9.NewEncoder().Bytes(bytes)
    return string(encoded[:])
}


 类似资料:
  • 问题内容: 我有一个编码为iso-8859-1的文件,其中包含诸如ô的字符。 我正在用Java代码读取此文件,例如: 但是ô字符总是乱码,通常打印为?。。 我已经读过这个主题(并且在途中学到了一点),例如 http://www.joelonsoftware.com/articles/Unicode.html http://bugs.sun.com/bugdatabase/view_bug.do?b

  • 我在Java应用程序中遇到字符串编码的问题。我的Informix数据库有ISO-8859-2编码。我在连接字符串中设置了。我的连接URL如下所示: 从数据库中选择数据后,Java字符串不能识别波兰特殊字符。方法返回代码。

  • 问题内容: 如果您的XML输入未使用UTF-8编码,则xml包的功能似乎需要一个。 你在哪里找到这样的东西? 问题答案: 更新了2015年及以后的答案:

  • 我在Spring项目中遇到编码问题。现在我使用 -Dfile.encoding=ISO-8859-1 参数运行 jvm (tomcat)。在我的.jsp文件中有几行: 在 Web 中.xml我定义了编码过滤器 但当我用波兰语字母łśżź传递值时,我遇到了一个问题。在我的java控制器中,打印(并保存在DB中)的值是用html代码代替抛光字母。例如 aaalł保存为aaal[am]#322;[上午]

  • 我正在利用设置。。。方法(例如SetupGetLineText)从inf文件中读取一些内容(我需要它,对通用ini解析器不感兴趣)。这些方法使用Windows-1252编码,我需要将其转换为Unicode。我使用一个字符串得到了这个结果,比如这个(输入类型为string): 编码。UTF8.编码。编码(1252).GetBytes(输入)); 即使这很好,您也可以立即从SetupGetLineTe

  • 主要内容:ISO-8859-1,HTML 预留字符,ISO 8859-1 字符实体现代的浏览器支持的字符集: ASCII 字符集 标准 ISO 字符集 数学符号、希腊字母、其他符号 ISO-8859-1 ISO-8859-1 是大多数浏览器默认的字符集。 ISO-8859-1 的较低部分(从 1 到 127 之间的代码)是最初的 ASCII 字符集(0-9 的数字,大写和小写英文字母表,以及一些特殊字符)。 ISO-8859-1 的较高部分(从 160 到 255 之间的代码)