2015-03-27 6 views
0

Все,Swift Invalid Base64 - Строка Concatenation

Это своего рода две части вопроса ...

Во-первых, я пытаюсь строить 64 закодировать изображение:

var finalMessage = ""; 
    if(imageBytes != nil && imageBytes.length > 0){ 
     finalMessage += " <image>"; 
     finalMessage += imageBytes!.base64EncodedStringWithOptions(nil); 
     finalMessage += "</image>"; 
    } 

Когда отладить и проверить finalMessage после последнего конкатенации сеттера, я это как значение в отладчике:

"\U0000fffc <image>/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAF3KADAAQAAAABAAAD6QAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgD6QXcAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAFhYWFhYWJhYWJjYmJiY2STY2NjZJXElJSUlJXG9cXFxcXFxvb29vb29vb4aGhoaGhpycnJycr6+vr6+vr6+vr//bAEMBGx0dLSktTCkpTLd8Zny3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t//dAAQ" 

Его длинный, поэтому прокрутите весь путь, чтобы увидеть, что нет тега </image>, который показан в строке 6 вышеприведенного кода. Очень странно ....

Итак, существует ли ограничение по размеру для кодировки базы 64? Любая идея о том, что может происходить здесь?

Спасибо!

+1

Вы попробовали 'println (finalMessage)'? * Отладчик * может ограничивать вывод определенной длиной. –

+0

@MartinR: вы были правы, это был отладчик. Мне нужно будет предоставить более подробную информацию по второму вопросу ... поэтому, если вы добавите свой ответ, я могу отметить это решение. – a432511

+0

Чтобы закрыть цикл, другой проблемой было усечение длины поля базы данных. Еще раз спасибо! – a432511

ответ

1

Ограничения по размеру для кодированных в Base64 строк, кроме имеющихся в наличии , отсутствуют. В частности, нет причин, по которым второй отчет в

finalMessage += imageBytes!.base64EncodedStringWithOptions(nil); 
    finalMessage += "</image>"; 

ничего не должен делать. Но отладчик может ограничить вывод (возможно, 64K?), Поэтому, если у вас есть сомнения, обратитесь к NSLog() или println().

0
var finalString = "" 
let screenshot = UIImage(named: "screen") 
let screenshotData = UIImagePNGRepresentation(screenshot) 
let screenshotBase64 = screenshotData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) as NSString 

if (screenshotBase64 != "") { 
    let tempString = screenshotBase64.stringByAppendingString("</image>") 
    finalString = "<image>\(tempString)" 
} 

println(finalString) 

Замените «экран» на любое ваше имя и проверьте, работает ли это.

+0

Я сделаю снимок. – a432511

+0

Этот код предполагает, что вы работаете с изображениями PNG. –

+0

Я использую эквивалентный метод для JPEG с параметром сжатия .20. – a432511

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