С Data (а не NSData), на самом деле, как на самом деле вы делаете версию jpeg utf8? - httprequest


1

Именно так, как описано здесь, qaru.site/questions/70930/...

[Ошибочно думать, что] JPEG-изображение изображения представляет собой кодированную UTF-8 строку. Это не так. Произвольные двоичные данные. Строки UTF-8 не являются произвольными последовательностями байтов; есть правила о том, какие байты могут следовать за другими байтами.

На самом деле, как лучше всего вывести данные utf8 из образа в эпоху Data?

Ежедневный вариант использования находится в форме http.

Я делаю что-то вроде этого,

    formData.append( "Content-Disposition etc".(using: .utf8)! )
    formData.append( "Content type etc".(using: .utf8)! )

    // now let add a #@@%$%$% image

    let trueBinary = UIImageJPEGRepresentation(i, 0.10)!
    print("the size seems to be (trueBinary.count)")

    let mystere = trueBinary.base64EncodedString(
                  options: .lineLength76Characters)

    formData.append( mystere.data(using: .utf8)! )

Но

A, что кажется poxy, и, вероятно, не работает.

B, понятие "lineLength" для меня ничего не значит, поэтому я просто думаю, что-то типа и там что-то там.

Обратите внимание, что невероятно смутно, если у вас есть Data x, и вы добавляете к xa несколько строк как utf8, используя append..... И затем вы добавляете "реальные" двоичные данные, такие как jpeg представление в x...... на самом деле это nils "x" - ouch! (Он не просто "не добавляет двоичный", он царапает x ни к чему.)

  •  21
  •  1
  • 8 фев 2020 2020-02-08 08:05:41

1 ответ

3

В этой строке есть проблема:

let mystere = trueBinary.count.base64EncodedString(
              options: .lineLength76Characters)

Проблема заключается в том, что trueBinary является Data, а trueBinary.count является Int, а Int не имеет метода base64EncodedString. Вы хотите это:

let mystere = trueBinary.base64EncodedString(
              options: .lineLength76Characters)

Что касается понятия "lineLength": вам не нужно указывать параметр длины строки, если вы этого не хотите. Возможно, я не должен был указывать один в ответе, на который вы ссылались в своем вопросе, потому что HTTP-запросы не являются строго MIME-сообщениями и не подпадают под ограничение длины строки MIME. Вы можете сделать это вместо:

let mystere = trueBinary.base64EncodedString()