PHP中如何处理xls文件的不同编码?
我正在开发一个涉及从 xls 文件解析数据的 php 脚本。我正在使用库 phpexcelreader。一切大部分都有效,但我偶然发现了一个奇怪的问题。某些文件解析不正确。看起来 xls 文件可能在内部使用不同的字符编码。至少,然后我通过 iconv -f cp1251 -t utf8 从脚本中输出,字符串得到纠正。
Phpexcelreader 有一个用于指定输出编码的选项,但看起来它缺乏检测输入编码的能力。有什么想法吗?
I'm developing a php script involving parsing data from xls files. I'm using library phpexcelreader. All mostly works, but I stumbled upon a strange problem. Some files are parsed incorrecty. Looks like xls files may use different character encodings internally. At least, then I pipe output from my script through iconv -f cp1251 -t utf8, strings get corrected.
Phpexcelreader has an option for specifing output encoding, but looks like it lacks an ability detect input encoding. Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
可以将工作簿对象的 _defaultEncoding 属性设置为包含 Excel 文件使用的字符集,然后读者用它来处理到 UTF-16LE 的转换,但它不努力识别内部字符集本身。
如果您
在其他 SPREADSHEET_EXCEL_READER_TYPE 定义中进行定义,然后修改从第 464 行开始的 switch 语句以包含 SPREADSHEET_EXCEL_READER_TYPE_CODEPAGE 的情况。这种情况的逻辑需要类似于:
重新创建 _GetInt2d 方法(似乎在某些时候已从代码中删除)并
创建一个 _CodePageNumberToName 方法以从其数值返回代码页名称:
并存储返回的值 器
或者,切换到可以首先正确处理代码页的 Excel 阅读
The _defaultEncoding property of the workbook object can be set to contain the charset used by the Excel file, and this is then used to handle conversion to UTF-16LE by the reader, but it makes no effort to identify the internal charset itself.
If you define
among the other SPREADSHEET_EXCEL_READER_TYPE definitions, and then modify the switch statement starting at line 464 to include a case for SPREADSHEET_EXCEL_READER_TYPE_CODEPAGE. The logic for this case needs to be something like:
Recreate the _GetInt2d method (that seems to have been stripped from the code at some point) as
and create a _CodePageNumberToName method to return the codepage name from its numeric value:
And store the returned value in $_defaultEncoding
Alternatively, switch to an Excel reader that can handle the codepage correctly in the first place
我的2美分:
我刚刚用这个替换了encodeUTF16
,并更改了第568行,
这些函数 api_detect_encoding 和 api_convert_encoding 可以在此库中找到:
http://code.google.com/p/chamilo/source/browse/main/inc/lib/internationalization。 lib.php?repo=经典
My 2 cents:
I just replaced the encodeUTF16 with this one
and change the line 568
these functions api_detect_encoding and api_convert_encoding can be found in this lib:
http://code.google.com/p/chamilo/source/browse/main/inc/lib/internationalization.lib.php?repo=classic
对于波斯语,我在第 568 行或其他版本 336 后添加了一行。
此代码支持波斯语,但你不能再使用英语了。
for Persian language i added one line after the line 568 or in other version 336.
this code support Persian but u can't use English any more.