2009-03-01 28 views
36

Tôi muốn chuyển đổi một số ký tự HTML trở lại văn bản bằng cách sử dụng Thư viện chuẩn Java. Tôi đã tự hỏi liệu có thư viện nào đạt được mục đích của mình không?Chuyển đổi ký tự HTML Quay lại văn bản Sử dụng Thư viện chuẩn Java

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    // TODO code application logic here 

    // "Happy & Sad" in HTML form. 
    String s = "Happy & Sad"; 
    System.out.println(s); 

    try { 
     // Change to "Happy & Sad". DOESN'T WORK! 
     s = java.net.URLDecoder.decode(s, "UTF-8"); 
     System.out.println(s); 
    } catch (UnsupportedEncodingException ex) { 

    } 
} 

Trả lời

53

Tôi nghĩ thư viện StringEscapeUtils.escapeHtml() và unescapeHtml() của thư viện Jakarta Commons Lang là những gì bạn đang tìm kiếm. Xem http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html.

+1

Url cập nhật : http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/StringEscapeUtils.html – Reu

+0

Không để đánh bại một con ngựa đã chết, nhưng những gì OP được yêu cầu là làm thế nào để dịch giữa các thực thể HTML và văn bản "đơn giản" (là ASCII cho tôi, nhưng YMMV). Thư viện Jakarta ở trên có unescapeHTML (và escapeHTML), nó thực hiện thủ thuật. URLDecoder vẫn hoạt động đối với các chuỗi URL mã hóa phần trăm (như tham số GET). – jjohn

+0

Làm thế nào tương tự sẽ hỗ trợ trong trường hợp của Android, bất kỳ ý tưởng? – CoDe

2

Tôi không biết cách nào để thực hiện việc đó bằng thư viện chuẩn. Nhưng tôi biết và sử dụng lớp này mà giao dịch với các thực thể html.

"htmlentities là một lớp mã nguồn mở Java có chứa một tập hợp các phương pháp tĩnh (htmlentities, unhtmlentities, ...) để chuyển đổi ký tự đặc biệt và mở rộng vào entitities HTML và ngược lại."

http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=htmlentities

7

java.net.URLDecoder giao dịch chỉ với định dạng MIME application/x-www-form-urlencoded (ví dụ "% 20" đại diện cho không gian), không phải với HTML character entities. Tôi không nghĩ rằng có bất cứ điều gì trên nền tảng Java cho điều đó. Bạn có thể viết lớp tiện ích của riêng mình để thực hiện chuyển đổi, chẳng hạn như this one.

5

Bộ giải mã URL chỉ nên được sử dụng để giải mã chuỗi từ các url được tạo bởi các biểu mẫu html có trong loại mime "application/x-www-form-urlencoded". Điều này không hỗ trợ các ký tự html.

Sau search Tôi đã tìm thấy một lớp học Translate trong thư viện HTML Parser.

+0

thư viện rất tốt, giờ đây thật dễ dàng để thực hiện điều gì đó như Miguel

24

Tại đây bạn chỉ cần thêm tệp jar trong lib jsoup vào ứng dụng của mình và sau đó sử dụng mã này.

import org.jsoup.Jsoup; 

public class Encoder { 
    public static void main(String args[]) { 
     String s = Jsoup.parse("<Français>").text(); 
     System.out.print(s); 
    } 
} 

liên kết để tải về jsoup: http://jsoup.org/download

+0

Đây phải là câu trả lời được chấp nhận. Không có thư viện nào khác nhanh hơn cũng không dễ nhập hơn Jsoup tuyệt vời. – Grux

+0

Tuyệt vời. Đây là câu trả lời. –

0

Như @jem đề nghị, chúng ta có thể sử dụng jsoup.

Với jSoup 1.8.3, bạn có thể sử dụng phương pháp Parser.unescapeEntities giữ lại html gốc.

import org.jsoup.parser.Parser; 
... 
String html = Parser.unescapeEntities(original_html, false); 

Dường như trong một số bản phát hành trước, phương pháp này không có mặt.

1

Bạn có thể sử dụng org.apache.commons.lang.StringEscapeUtils lớp:

String s = StringEscapeUtils.unescapeHtml("Happy & Sad") 

Nó đang làm việc.

+0

Tôi thích giải pháp này. Khi có thể, tôi đề nghị sử dụng Apache libs. (quan điểm của tôi) –

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