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

Javascript 通过js API消息发布BASE64图像和消息不是UTF-8编码的,javascript,facebook-graph-api,character-encoding,base64,Javascript,Facebook Graph Api,Character Encoding,Base64,我们正在将BASE64图像与状态消息一起发布到用户相册中。 一切正常,但如果状态消息包含未正确编码的非基本ASCII字符 我们尝试: var encodedPng = imageData.substring(imageData.indexOf(',')+1,imageData.length); imageData = Base64Binary.decode(encodedPng); // this is the multipart/form-data boundary we'l

我们正在将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 );
var encodedPng=imageData.substring(imageData.indexOf(',')+1,imageData.length);
imageData=Base64Binary.decode(encodedPng);
//这是我们将使用的多部分/表单数据边界
变量边界='——这是边界1234567890';
//让我们对包含在var中的图像文件进行编码
var formData='-'+boundary+'\r\n'
formData+='内容配置:表单数据;name=“source”;filename=“”+filename+”\r\n';
formData+='内容类型:'+mimeType+'\r\n\r\n';
对于(var i=0;i
如果我们通过FB对状态消息进行抽样发布,那么api(…)字符的编码确实是正确的

谢谢你的帮助

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

不,您正在发布已解码的二进制数据。不要那样做。摆脱这一行:

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