Сериализация XML для символов utf содержит ncr для суррогатной парыJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Сериализация XML для символов utf содержит ncr для суррогатной пары

Сообщение Anonymous »

У меня есть полезная нагрузка, которая может содержать текст, например 𠮷. Когда я сериализую эту полезную нагрузку в XML, я ожидаю, что такие символы не будут закодированы в ncr или закодированы как 𠮷 один символ, но я наблюдаю �� два (суррогатных) символа вместе представляют один и тот же символ Юникода.
Минимальный пример, демонстрирующий эту проблему:

Код: Выделить всё

package something...;

import net.shibboleth.utilities.java.support.xml.SerializeSupport;
import org.opensaml.core.config.InitializationException;
import org.opensaml.core.config.InitializationService;
import org.opensaml.core.xml.schema.XSString;
import org.opensaml.core.xml.schema.impl.XSStringBuilder;
import org.opensaml.core.xml.util.XMLObjectSupport;
import org.opensaml.saml.saml2.core.Attribute;
import org.opensaml.saml.saml2.core.AttributeValue;
import org.w3c.dom.Document;

/** Generates Response.xml using openSAML library version 3. */
final class SamlResponseGenerator {
public static void main(String[] args) throws Exception {
try {
InitializationService.initialize();
} catch (InitializationException e) {
throw new IllegalStateException(e);
}

// First Name Attribute.
Attribute firstNameAttribute =
(Attribute) XMLObjectSupport.buildXMLObject(Attribute.DEFAULT_ELEMENT_NAME);
firstNameAttribute.setName("FirstName");
XSStringBuilder firstNameTestValueStringBuilder = new XSStringBuilder();
XSString firstNameAttributeValueXS =
firstNameTestValueStringBuilder.buildObject(
AttributeValue.DEFAULT_ELEMENT_NAME, XSString.TYPE_NAME);
String myName = "𠮷";
firstNameAttributeValueXS.setValue(myName);
firstNameAttribute.getAttributeValues().add(firstNameAttributeValueXS);

Document doc = XMLObjectSupport.marshall(firstNameAttribute).getOwnerDocument();
String docString = SerializeSupport.nodeToString(doc);
System.out.println(docString);
}

private SamlResponseGenerator() {}
}
Список опробованных решений:
  • Трансформаторы (не работает)
  • XMLHelper.writeNode с файлообменником, открытым в формате кодировки utf-8. Не работает
  • Вывод XML в постпроцессе (работает, но это хакерство)
  • Пробовал с OpenSAML v2 и v3 (не работает)
  • Маршалинг суррогатных пар в формате XML
Я использую неправильный сериализатор или неверная конфигурация. Что я могу сделать, чтобы получить желаемый результат (аналогично устаревшему серверу).
Разве в этой статье в Википедии не говорится, что суррогатные пары не допускаются в числовой ссылочной нотации.

Подробнее здесь: https://stackoverflow.com/questions/788 ... ogate-pair
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»