Не знаю, почему в очереди заменяется код ASCII?
В основном SDK преобразует строковое сообщение, чтобы сделать его безопасным для XML. Если вы посмотрите на код в SDK, по умолчанию он использует TextXmlQueueMessageEncoder
в качестве кодировщика сообщений. Функция encode
заменяет "
на "
, чтобы сделать его безопасным для XML.
Из кода SDK (фрагменты кода):
QueueService.prototype.createMessage = function (queue, messageText, optionsOrCallback, callback) {
var userOptions;
azureutil.normalizeArgs(optionsOrCallback, callback, function (o, c) { userOptions = o; callback = c; });
validate.validateArgs('createMessage', function (v) {
v.string(queue, 'queue');
v.queueNameIsValid(queue);
v.callback(callback);
});
var xmlMessageDescriptor = QueueMessageResult.serialize(messageText, this.messageEncoder);
function TextXmlQueueMessageEncoder(){
}
util.inherits(TextXmlQueueMessageEncoder, QueueMessageEncoder);
/**
* Encode utf-8 string by escaping the xml markup characters.
* @this TextXmlQueueMessageEncoder
*
* @param {string} [input] The target to be encoded.
*
* @return {string}
*/
TextXmlQueueMessageEncoder.prototype.encode = function(input){
return input.replace(/&/gm, '&')
.replace(/</gm, '<')
.replace(/>/gm, '>')
.replace(/"/gm, '"')
.replace(/'/gm, ''');
};
Одним из возможных решений было бы преобразование строки в строку в кодировке base64, как вы предложили. Однако, если вы используете SDK для получения сообщений, вы не должны видеть эти "
в своем теле сообщения, так как SDK заботится о декодировании сообщения.