【问题标题】:Blob URL with UTF-16LE encoding使用 UTF-16LE 编码的 Blob URL
【发布时间】:2015-02-03 18:57:34
【问题描述】:

我有这个字符串%22%00%41%00%22%00%09%00%22%00%42%00%22%00,它是"A"\t"B" 的UTF-16LE 等价物。 (\t 是一个制表符。)

我正在尝试构建一个 Blob,然后为它构建一个 URL,但输出未解码为正确的实体。

var blob=new Blob([stringHere],{type:'text/csv;charset=UTF-16LE;'});
var blobUrl=URL.createObjectURL(blob);

有没有办法告诉 Blob 字符串编码,以便它在 Excel 中打开时看起来正确(在这种特殊情况下)?

我需要 UTF-16LE,否则使用 UTF-8 会导致 Excel 无法正确解析 .csv 文件。

谢谢。

【问题讨论】:

    标签: javascript blob utf-16


    【解决方案1】:

    看起来你在文件中需要一个 utf-16 le bom,你不能在 js 中使用字符串,所以你必须使用字节数组。请参阅下面的示例

    var stringHere = '%ff%fe%22%00%41%00%22%00%09%00%22%00%42%00%22%00';
    var byteArray = [];
    stringHere.replace(/([0-9a-f]{2})/gi, function(d){
        byteArray.push(parseInt(d, 16));
    });
    var blob=new Blob([new Uint8Array(byteArray)],{type:'text/csv;charset=UTF-16LE;'});
    var blobUrl=URL.createObjectURL(blob);
    

    【讨论】:

    • 你好穆萨,谢谢。不过,这似乎没有输出 UTF-16LE。就像你说的,我需要 Excel 的编码来正确解释 CSV。 BOM 用于非 ASCII 字符。在我看来,type 仅查看 MIME 类型并忽略指定的字符集。
    • @Francisc 我试过了,它对我有用,如果你把 blob url 放在浏览器中,它会下载文件,只需给它一个 csv 扩展名并用 excel 打开它。
    • 您实际上在不同的列中看到“A”和“B”?
    • 你是对的,它确实有效。我第一次测试时一定是做错了。
    • 也许,我不知道。但要记住,Uint8Array 中的每个条目代表一个字节而不是一个字符。一个 utf-8 字符可以是 1-4 个字节长。 url 编码对每个字节进行编码,这使得将其转换为类型化数组变得容易。
    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 2021-07-05
    • 2017-02-28
    • 2018-07-18
    • 2019-05-06
    • 2018-06-23
    相关资源
    最近更新 更多