bluelarva
小狐狸
小狐狸
  • UID15580
  • 注册日期2006-11-08
  • 最后登录2006-11-26
  • 发帖数5
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:6186回复:3

nsIFile (nsIFilePicker?) 中文档名显示 "_"

楼主#
更多 发布于:2006-11-08 17:20
我电脑运行环境:

英文版winXP sp1,
英文版firefox 1.5.0.7

以下的程序是让人点击open按钮,然后选者文件。整个xul页面只有一个按钮和一个listbox.
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window>
<window xmlns= "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script>
function openFile() {
	var nsIFilePicker = Components.interfaces.nsIFilePicker;
	var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
	fp.init(window, "Select a File", nsIFilePicker.modeOpenMultiple);

	var res = fp.show();

	if (res == nsIFilePicker.returnOK){
  	var fileEnum = fp.files;
		var item = null;
		var file = null;  

		while(fileEnum.hasMoreElements()) {
			item = fileEnum.getNext();

			file = item.QueryInterface(Components.interfaces.nsIFile);
			
			// Fill in information into listbox
			var cellName = document.createElement("listcell");
			cellName.setAttribute("label", file.leafName );
			
			var cellSize = document.createElement("listcell");
			cellSize.setAttribute("label", file.fileSize);
			
			var cellType = document.createElement("listcell");
			cellType.setAttribute("label", "test文件おの태으");

			var cellModified = document.createElement("listcell");
			cellModified.setAttribute("label", file.lastModifiedTime);
			
			var item = document.createElement("listitem");
			item.appendChild(cellName);
			item.appendChild(cellSize);
			item.appendChild(cellType);
			item.appendChild(cellModified);

			var list = document.getElementById("fileList");
			list.appendChild(item);
		}
	}
}
</script>

<hbox>
	<button label="Open..." oncommand="openFile()" />
</hbox>
<listbox id="fileList" seltype="multiple" flex="1">
  <listhead>
    <listheader label="Name"/>
    <listheader label="Size"/>
    <listheader label="Type"/> 
    <listheader label="Modified" />
  </listhead>
  <listcols >
    <listcol flex="1"/>
    <listcol flex="1"/>
    <listcol flex="1"/>
		<listcol flex="1"/>   
  </listcols>
</listbox>	
</window>


假如我只选取英文文档名,文件名就会完全无误地显示在listbox。cellType栏位只是用来确定xul可以显示中文。
假如我选取带有中文名的文档,listbox就不会显示了。检查javascript console:
Error: uncaught exception: [Exception... "Component returned failure code: 0x80520012 (NS_ERROR_FILE_NOT_FOUND) [nsIFile.fileSize]"  nsresult: "0x80520012 (NS_ERROR_FILE_NOT_FOUND)"  location: "JS frame :: chrome://findfile/content/test.xul :: openFile :: line 28"  data: no]


所以我把以下几行的程式comment out.
var cellSize = document.createElement("listcell");
//			cellSize.setAttribute("label", file.fileSize);

			var cellModified = document.createElement("listcell");
//			cellModified.setAttribute("label", file.lastModifiedTime);


现在listbox可以显示文件名,但所有中文字都一律换成"_".
例如:tall文.txt 成了tall_.txt

我不知道这问题是因为nsIFilePicker或nsIFile.如何解决这问题呢?谢谢。
dail_cui
小狐狸
小狐狸
  • UID16121
  • 注册日期2006-12-08
  • 最后登录2007-01-06
  • 发帖数15
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
1楼#
发布于:2006-11-08 17:20
XUL文件编码问题,改一下第一行就OK了。
我现在也正在作XUL程序,也遇到了很大的困难。
如果可以的话,楼上留个QQ可以吗?
ChaosFox
小狐狸
小狐狸
  • UID275
  • 注册日期2004-11-27
  • 最后登录2012-05-31
  • 发帖数89
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
2楼#
发布于:2006-11-08 17:20
试试用nsIScriptableUnicodeConverter先转成unicode
President1028
小狐狸
小狐狸
  • UID22266
  • 注册日期2007-12-13
  • 最后登录2008-01-17
  • 发帖数3
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
3楼#
发布于:2006-11-08 17:20
如果楼主用的编辑器是UEstudio,可以试试
文件->转换->ASCII->UTF-8

试试看呢
游客

返回顶部