通过js API消息发布BASE64图像和消息不是UTF-8编码的

Posting BASE64 image and message via js API message is not UTF-8 encoded

本文关键字:消息 UTF-8 编码 BASE64 API js 通过 图像      更新时间:2023-09-26

我们将BASE64图像与状态消息一起发布到用户相册。一切正常,但如果状态消息包含非基本ASCII字符,这些字符没有正确编码。

我们尝试:

var encodedPng = imageData.substring(imageData.indexOf(',')+1,imageData.length);
    imageData = Base64Binary.decode(encodedPng);
    // this is the multipart/form-data boundary we'll use
    var boundary = '----ThisIsTheBoundary1234567890';
    // let's encode our image file, which is contained in the var
    var formData = '--' + boundary + ''r'n'
    formData += 'Content-Disposition: form-data; name="source"; filename="' + filename + '"'r'n';
    formData += 'Content-Type: ' + mimeType + ''r'n'r'n';
    for ( var i = 0; i < imageData.length; ++i )
        formData += String.fromCharCode( imageData[ i ] & 0xff );
    formData += ''r'n';
    formData += '--' + boundary + ''r'n';
    formData += 'Content-Disposition: form-data;  name="message"'r'n';
    formData += 'Content-Type: text/html; charset=utf-8'r'n'r'n';
    formData += message + "'r'n"
    formData += '--' + boundary + '--'r'n';
    var xhr = new XMLHttpRequest();
    xhr.open( 'POST', 'https://graph.facebook.com/'+picMood.fb_album_id+'/photos?access_token=' + token, true );
    xhr.onload = xhr.onerror = function() {
        if(typeof callback == "function")
            callback();
    };
    xhr.setRequestHeader("content-type",    "multipart/form-data; charset=utf-8; boundary=" + boundary);
    xhr.sendAsBinary( formData );

如果我们通过FB.api(…)示例发布状态消息,字符确实被正确编码。

我们正在将BASE64图像与状态消息一起发布到用户相册

不,你发布的是解码的二进制数据。不要那样做。删除这一行:

imageData = Base64Binary.decode(encodedPng);
并将encodedPng 上传为base64数据。假设API被设计为处理base64数据,应该没问题。如果不是,并且您确实需要上传二进制数据,则不应该尝试使用表单编码的文本。