我在java中使用itext创建PDF。我有阿拉伯语文本的问题。 阿拉伯语文本'بنايةالمهىطالارضي-الفنار '它显示了ب†Ø§ÙŠØ©Ø§Ù“Ù。 我有一个休息的网络服务,正在为上述阿拉伯数据返回'ب†Ø§ÙŠØ©Ø§Ù“Ù'。 这是 RestService 的代码。
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON + "; charset=UTF-8")
public Response getdata(DataRequest request) throws Exception {
DataResponse output = facade.getSummary(request);
return Response.ok(output).build();
}
下面是访问服务代码以获取数据的 Restclient 代码
ClientResponse clientResponse = webResource.type(javax.ws.rs.core.MediaType.APPLICATION_JSON + "; charset=UTF-8").post(ClientResponse.class,
request);
if (clientResponse.getStatus() == UIConstants.RESPONSE_SUCCESS) {
response = (PolicySummaryResponse) RestClient.unMarshalJson(
PolicySummaryResponse.class,
clientResponse.getEntityInputStream());}
当我在JSP中显示此响应时,它显示阿拉伯数据。 但是当我创建pdf时,它显示的是'ب†Ø§ÙŠØ©Ø§Ù“Ù' 这是pdf的代码
PdfPTable ownerTable = new PdfPTable(4);ownerTable.addCell(owneraddress);
我也尝试过但没有运气
Font arabicfont = FontFactory.getFont("/com/ARIALN.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
PdfPCell addrCell = new PdfPCell(new Paragraph(policy.getPayor().getAddress1().trim(), arabicfont));
addrCell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
ownerTable.addCell(addrCell);
这显示所有空白只有 - 。 请帮忙
答案 0 :(得分:2)
您遇到编码问题,因为您的输出看起来与您的输入不同。我将向您展示如何使用https://r12a.github.io/apps/conversion/对前两个字符诊断此问题。您的前两个字符بن以标准Java编码表示法编码,如下所示:
\u0628 \u0646
这是UTF-16,有点人性化。但是,如果以UTF-8编码,则会得到完全不同的字节数组:
D8 A8 D9 86
有趣的部分是当我们开始混合编码时,例如使用UTF-8作为UTF-16字符串的输入:
\u00D8 \u00A8 \u00D9 \u0086
这会在上述网站中输出以下三个可见字符 - 与您报告的字符串的开头相同,也是一个不可见字符(Unicode中位置0x86上的控制字符SSA):
Ø ¨ Ù
我假设您无法更改初始String
的创建方式,因此我们必须通过在复制构造函数中使用其文本来强制执行编码。我知道用Java解决这个问题的最简单方法如下:
String line = // your input
line = new String(line.getBytes(), Charset.forName("UTF-8"));