我有一个网页(通过其标题)编码为WIN-1255
。
Java程序创建自动嵌入页面的文本字符串。问题是原始字符串是以UTF-8编码的,因此在页面中创建了一个Gibberish文本字段。
不幸的是,我无法更改页面编码 - 这是客户专有系统所要求的。
有什么想法吗?
更新
我正在创建的页面是一个需要设置为WIN-1255的RSS源,显示从另一个以UTF-8编码的源中获取的信息。
第二次更新:
感谢所有回复。我已经设法转换了字符串,然而,还有,Gibberish。问题是除了头编码之外还应该设置XML编码。
亚当
答案 0 :(得分:2)
到目前为止,您需要设置响应编写器的编码。只有响应头,您基本上只是指示客户端应用程序使用哪种编码来解释/显示页面。如果响应本身是用不同的编码编写的,那么这不会起作用。
你遇到这个问题的背景是完全不清楚的(请在未来的问题中详细说明),所以这里有几个解决方案:
如果是JSP,则需要在JSP的顶部设置以下内容以设置响应编码:
<%@ page pageEncoding="WIN-1255" %>
如果是Servlet,则需要在第一次刷新之前设置以下内容以设置响应编码:
response.setCharacterEncoding("WIN-1255");
通过自动隐式设置Content-Type
响应头和charset
参数的方式来指示客户端使用相同的编码来解释/显示页面。有关详细信息,另请参阅this article。
如果它是依赖于基本java.net
和/或java.io
API的自行开发的应用程序,那么您需要通过使用{{3}构造的OutputStreamWriter
来编写字符。您可以在其中指定编码:
Writer writer = new OutputStreamWriter(someOutputStream, "WIN-1255");
答案 1 :(得分:1)
假设你已经控制了原始(正确表示的)字符串,只需要在win-1255中输出它们:
import java.nio.charset.*;
import java.nio.*;
Charset win1255 = Charset.forName("windows-1255");
ByteBuffer bb = win1255.encode(someString);
byte[] ba = new byte[bb.limit()];
然后,只需在适当的地方写下ba的内容。
编辑:你用ba做什么取决于你的环境。例如,如果您正在使用servlet,则可以执行以下操作:
ServletOutputStream os = ...
os.write(ba);
我们也不应忽视调用setContentType("text/html; charset=windows-1255")
(setContentType),然后正常使用getWriter的可能方法。如果在元标记或HTTP响应标题中设置了windows-1255,则无法完全清楚。
您澄清说您有一个需要解码的UTF-8文件。如果你还没有正确解码UTF-8字符串,这应该没什么大不了的。只需看看InputStreamReader(someInputStream,Charset.forName(“utf-8”))
答案 2 :(得分:0)
什么在页面中嵌入数据?它应该将其读作文本(在UTF-8中),然后在网页的编码(Win-1255)中再次将其写出,或者您应该更改Java程序以在Win-1255中创建文件(或其他)以启动用。
如果您可以提供有关系统如何工作的更多详细信息(生成网页的内容?它如何与Java程序交互?)那么它将使事情变得更加清晰。
答案 3 :(得分:0)
我正在创建的页面是一个需要设置为WIN-1255的RSS源,显示从另一个以UTF-8编码的源中获取的信息。
在这种情况下,使用解析器加载UTF-8 XML。这应该正确地将数据解码为UTF-16字符数据(Java字符串总是UTF-16)。您的输出机制应编码为UTF-16到Windows-1255。
答案 4 :(得分:0)
byte[] originalUtf8;//Here input
//utf-8 to java String:
String internal = new String(originalUtf8,Charset.forName("utf-8");
//java string to w1255 String
byte[] win1255 = internal.getBytes(Charset.forName("cp1255"));
//Here output