类似的问题还有很多,但没有人帮我。
utf-8 可以是 1 个字节或 2,3,4。
ISO-8859-15 始终为 2 个字节。
但是我需要 1 字节字符,例如代码页代码“page 863”(IBM863)。
http://en.wikipedia.org/wiki/Code_page_863
例如,“é”是代码点 233,在 utf 8 中长度为 2 个字节,如何将其转换为 Java 中的 IBM863(1 个字节)?
可以在 JVM -Dfile.encoding=UTF-8 上运行吗?
当然,转换意味着可能会丢失一些字符,因为 IBM863 较小。 但我需要语言特定的字符,例如法语、è、é 等。
编辑1:
String text = "text with é";
Socket socket = getPrinterSocket( printer);
BufferedWriter bwOut = getPrinterWriter(printer,socket);
...
bwOut.write("PRTXT \"" + text + "\n");
...
if (socket != null)
{
bwOut.close();
socket.close();
}
else
{
bwOut.flush();
}
它将成为配备 Fingerprint 8.2 的标签打印机。
编辑2:
private BufferedWriter getPrinterWriter(PrinterLocal printer, Socket socket)
throws IOException
{
return new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
}
最佳答案
首先:不存在“1 字节字符”这样的东西,或者事实上,无论 n 是什么,都不存在“n 字节字符”。
在Java中,char
是一个UTF-16代码单元;根据 (Unicode) 代码点,需要一个或两个 char
来表示一个代码点。
您可以使用以下方法:
-
Character.toChars()
将 Unicode 代码点转换为表示该代码点的char
数组; - 一个
CharsetEncoder
执行char[]
到byte[]
转换; - 一个
CharsetDecoder
执行byte[]
到char[]
转换。
您可以从 Charset
的 .new{Encoder,Decoder}()
方法获取后两者。
这里至关重要的是要知道您的输入到底是什么:它是一个代码点,还是一个编码的字节数组?您必须根据此情况调整您的代码。
最后一点:file.encoding
设置定义了当您未指定要使用的字符集时要使用的默认字符集,例如在 FileReader
构造函数中;您应该避免不指定字符集!
关于java 将utf-8 2字节字符转换为1字节字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26588828/