Как отправить UTF8 в REST-API WordPress? - PullRequest
0 голосов
/ 14 февраля 2019

Искаженные символы UTF-8, возможно, неправильно закодированные

Отказ от ответственности: кодировки символов меня сильно смущают.
Я хочу создать множество постов, автоматизированных с помощью WordPress REST-API.Я могу создавать посты без проблем - если только в моем контенте нет специальных символов.Emojis, например.

$params = @{
    title = $Title
    content = $Content # "foobar" would work just fine; 
                       # "?äöü" will give me an error
}

Invoke-RestMethod -Uri "https://my.blog.foo/wp-json/v2/posts" `
                  -Method POST `
                  -Headers @{ Authorization = ("Basic {0}" -f $ACCESS_TOKEN) } ` 
                  -ContentType "application/json" `
                  -UseBasicParsing `
                  -Body $($params | ConvertTo-Json) 

Я предполагаю, что это на самом деле не связано с WordPress.Как бы то ни было, я довольно долго возился с этим, и я просто не могу придумать, как отправить свой контент без искажения ("ö" получает "?").

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Используйте -ContentType "application/json; charset=utf-8"; вместо.

Если это не сработает, вам также может понадобиться кодировать ваше тело в UTF8.$body = [System.Text.Encoding]::UTF8.GetBytes($body);

Полный пример

$params = @{
    title = $Title
    content = $Content # "foobar" would work just fine; 
                       # "?äöü" will give me an error
}

$Body = $params | ConvertTo-Json
$Body = [System.Text.Encoding]::UTF8.GetBytes($body)

$Splat_Post= @{
    ContentType = "application/json; charset=utf-8"
    UseBasicParsing = $true
    Method = 'POST'
    Uri = "https://my.blog.foo/wp-json/v2/posts"
    Headers = @{ Authorization = ("Basic {0}" -f $ACCESS_TOKEN) }
}

Invoke-RestMethod @Splat_Post-Body $Body

Примечание: я переработал код, чтобы продемонстрировать разбрызгивание .

Если вынужно каждый раз вызывать этот метод с одними и теми же параметрами, кроме body, вы можете вызывать его так: Invoke-RestMethod @Splat_Post -Body $Body затем просто меняя $ Body на содержимое ваших желаний каждый раз.

0 голосов
/ 14 февраля 2019

Вы можете попытаться закодировать тело как UTF8 перед отправкой

-Body ([System.Text.Encoding]::UTF8.GetBytes(($params | ConvertTo-Json)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...