代码之家  ›  专栏  ›  技术社区  ›  boop lanpa

如何将UTF8发送到WordPress REST-API?

  •  0
  • boop lanpa  · 技术社区  · 5 年前

    UTF-8字符格式不正确,可能编码不正确


    我想通过WordPress REST-API自动创建很多帖子。我可以毫无问题地创建帖子-除非我得到 特殊的 我内容中的角色。例如,表情符号。

    $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相关的问题。不管怎么说,我已经摆弄了很长一段时间,我只是想不出一种方法来发送我的内容,而不畸形(“得到”?)它。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Sage Pourpre    5 年前

    使用 -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
    

    注意:我重新编写了代码来演示 splatting

    如果每次都需要使用除body之外的所有相同参数调用该方法,则可以这样调用它: Invoke-RestMethod @Splat_Post -Body $Body 然后每次只要把$Body换成你想要的内容就行了。

        2
  •  0
  •   halv    5 年前

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