2012-11-23 14 views
6

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

+0

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? –

+0

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. –

Trả lời

0

Sự cố mã hóa ký tự có thể khá phức tạp. Trong trường hợp của bạn, vì bạn đã thực hiện khá một số điều tra, tôi sẽ bắt đầu kiểm tra rằng file jsp có đúng mã hóa trang thiết lập:

<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> 
+0

Hi Qurijn, tôi đã thêm điều này vào mã scriptlet và nó đã không thay đổi các vấn đề tôi đang nhìn thấy. Cảm ơn bạn đã phản hồi nhanh –

+0

Bạn có chắc chắn các CP của mình (typeMapping = ComponentPresentation trong cd_storage_conf.xml) được xuất bản vào cơ sở dữ liệu không? – Quirijn

Các vấn đề liên quan