我在flex应用程序中使用as3xls库将数据表导出到excel表。我的应用程序是多语言的,包含utf-8个字符。
有人能帮我如何在excel表中包含utf-8字符吗?
当访问firefox和chrome中的应用程序时,Splash的答案无疑是有效的,但在Safari上不起作用。
as3xls的当前实现不支持UTF-8编码。saveToByteArray
函数使用不支持UTF-8的BIFF2(Excel2.x)流进行编码。
BIFF5之前的所有Excel文件格式都包含简单的字节字符串。这个字节字符串由字符串的长度后跟字符数组。。。字符数组的编码取决于例如取自CODEPAGE记录。
快速解决方案可以是将ExcelFile.as
中的saveToByteArray()
函数更改为
public function saveToByteArray(codePageID: int, charSet: String):ByteArray
在br.writeTag(bof);
之后添加这些行
if (codePageID > 0)
{
var codePage:Record = new Record(Type.CODEPAGE);
codePage.data.writeShort(codePageID);
br.writeTag(codePage);
}
并将cell.data.writeUTFBytes(value);
更改为cell.data.writeMultiByte(value, charSet);
通过这种方式,您可以根据需要调整角色集。
var xls:ExcelFile = new ExcelFile();
...
// write xls with cyrillic characters
var bytes:ByteArray = xls.saveToByteArray(28595, "iso-8859-5");
进一步阅读:
- 代码页标识符
- http://en.wikipedia.org/wiki/Character_encoding
- http://www.openoffice.org/sc/excelfileformat.pdf