Tôi đang gặp vấn đề với mã hóa ký tự khi xem nội dung động từ cơ sở dữ liệu môi giới.Các vấn đề về mã hóa ký tự khi nhận các thành phần động từ một DB môi giới - Tridion, Oracle, JSP
Tôi có một tập lệnh gọi cho người môi giới DB để tạo chuỗi XML và sau đó được phân tích bằng XSL.
Tôi đã tước lại mã của tôi khi gỡ lỗi vấn đề này và kịch bản bây giờ trông giống như:
.....
strOutput= "<xml>";
ComponentPresentationFactory cpf = new ComponentPresentationFactory(PublicationID);
for (int i =0; i < itemURIs.length; i++)
{
ComponentPresentation cp = cpf.getComponentPresentation(itemURIs[i], strComponentTemplateURI);
if(cp != null){
String content = "";
content = cp.getContent();
strOutput += content;
}
}
strOutput+= "</xml>";
......
Khi tôi manualy overide mã này và thiết lập các nội dung chuỗi xml manualy trong mã dữ liệu được hiển thị đúng trên màn hình tức là:
.....
strOutput= "<xml>";
ComponentPresentationFactory cpf = new ComponentPresentationFactory(PublicationID);
for (int i =0; i < itemURIs.length; i++)
{
ComponentPresentation cp = cpf.getComponentPresentation(itemURIs[i], strComponentTemplateURI);
if(cp != null){
String content = "<xml><dynamicContent><subtitle><![CDATA[Außenbeleuchtung]]></subtitle></dynamicContent></xml>";
strOutput += content;
}
}
strOutput+= "</xml>";
......
Conponent được xuất bản cho nhà môi giới nội dung DB sử dụng CT có định dạng đầu ra được đặt thành "Định dạng XML".
Mục tiêu xuất bản được thiết lập như Target Language: JSP và Mặc định Code Page: Unicode UTF-8
Khi tôi xem trước các nội dung sử dụng CT này sau đó dữ liệu sẽ được hiển thị một cách chính xác:
<dynamicContent>
<tcm_id>tcm:345-23288</tcm_id>
<title><![CDATA[LED Road R250 - Maximum LED performance for street and highway illumination]]></title>
<subtitle><![CDATA[Außenbeleuchtung ]]></summary>
</dynamicContent>
Đây cũng là trường hợp khi xem trước thông qua trình tạo mẫu.
Broker DB là một Oracle DB (Oracle Database 11g Enterprise Edition phiên bản 11.2.0.2.0) và tôi đã kiểm tra các thiết lập charecter
SQL> select * from v$nls_parameters where parameter like '%CHARACTERSET%';
PARAMETER VALUE
NLS_CHARACTERSET UTF8
NLS_NCHAR_CHARACTERSET UTF8
Đã có người khác đi qua bất kỳ ví dụ như thế này trước đây. Dường như có sự cố với bộ nhớ DB, Kết nối với DB hoặc cp.getContent(); phương pháp.
Bất kỳ trợ giúp nào sẽ được đánh giá cao và nếu bạn có bất kỳ câu hỏi nào khác, vui lòng cho tôi biết.
Kính trọng, Chris
Nội dung trông như thế nào khi được truy xuất từ SQLPlus? Bạn đã thử đặt mức nhật ký của mình để gỡ lỗi và kiểm tra xem có bất kỳ sự cố mã hóa nào trong lệnh gọi getContent không? Bạn đã thử sử dụng ComponentPresentationAssembler thay vì ComponentPresentationFactory chưa? –
Hi Nuno, tôi đã xem nội dung thông qua trình quản lý Oracle DB và không có vấn đề về mã hóa khi xem nhưng điều này có thể là do người xem đang xử lý mã hóa. Tôi vừa mới triển khai mã của tôi bằng cách sử dụng ComponentPresentationAssembler thay vì ComponentPresentationFactory và nó có kết quả cuối cùng giống hệt nhau. –