2013-06-16 1 views
8

Я преобразую MIME-сообщения в XML, чтобы я мог отправить их в службу слияния как запросы SOAP, но Emoji задает мне проблемы (например, , которые я бы хотел преобразовать в 😃).Преобразование Java emoji в xml: какие библиотеки существуют?

Я использую XStream для обработки своих преобразований, но он неправильно кодирует emoji и другие пары высоких/низких суррогатов (см. Примерный пример ниже). Возможно, что у меня отсутствует какой-то важный компонент конфигурации xstream.

Я нашел this project, основанные на this project, который делает преобразование для отдельных поставщиков услуг японского мобильного телефона с помощью жестко закодированы отображений, но я чувствую, что эта проблема, вероятно, решена более элегантно в существующих Oracle или третьей сторона (Apache, и т. д.).

Из того, что я читал и слышал NuSOAP решает эту проблему для PHP, но я хотел бы остаться в мире Java/Groovy для преобразования emoji, чтобы я мог использовать совместимую библиотеку.

Какие инструменты/подходы вы используете для обработки преобразования emoji в XML на JVM?

import junit.framework.TestCase; 
import com.thoughtworks.xstream.XStream; 

public class XStreamTest extends TestCase { 
    public void testXStreamEmojiEncoding() { 
     final String expected = "Open mouth smiley 😃 and two chicken heads followed by a period 🐔🐔."; 
     final String original = "Open mouth smiley and two chicken heads followed by a period ."; 

     final XStream xStream = new XStream(); 

     final String returned = xStream.toXML(original); 

     assertEquals("<string>" + expected + "</string>", returned); 
    } 
} 

выше тест ищет HTML десятичного представление смайликов, но я буду принимать другие форматы, которые будут работать на MIME.

+0

Я не вижу, как XML-библиотека, которая правильно обрабатывает символы вне BMP, должна иметь проблемы с Emojis (даже если они недавно добавлены в Unicode). Не могли бы вы опубликовать код, демонстрирующий проблему? –

+1

Просто получите библиотеку XML, которая поддерживает Unicode 2.0 (который был опубликован в 1996 году, семнадцать лет назад) или более поздней версии (основная особенность, представляющая интерес для поддержки UTF-16). XStream явно этого не делает; файл отчета об ошибке и магазин для нового. –

+0

@JoachimSauer: Я обновил сообщение – eebbesen

ответ

5

Я недавно написал библиотеку для этого: emoji-java
Вот вид продукции вы получите:

String str = "An awesome string with a few emojis!"; 
String result = EmojiParser.parseToAliases(myString); 
System.out.println(myString); 
// Prints: 
// "An &#128512;awesome &#128515;string with a few &#128521;emojis!" 

Вы можете либо добавить баночку в свой проект или использовать зависимость Maven:

<dependency> 
    <groupId>com.vdurmont<groupId> 
    <artifactId>emoji-java<artifactId> 
    <version>1.0.0</version> <!-- Or whatever the version will be when you read this post --> 
</dependency> 

 Смежные вопросы

  • Нет связанных вопросов^_^