在 Cordova/Phonegap for Android 中包含中文文件名的页面
2013-06-30 22:53
501 查看
在 Cordova/Phonegap for Android 中包含中文文件名的页面
本贴首发于:http://xuekaiyuan.com/forum.php?mod=viewthread&tid=14
将中文文件名重命名为 jarsigner 程序支持的文件名
将文件名按 UTF-8 编码进行 URL 编码。
判断是否和原来的文件名相同
如果不相同则重命名
完整 rename.php 源代码如下
在程序中将请求还原成相应的文件名
确定需要判断的路径
判断当前请求是否属于该路径
属于该路径时,判断当前请求是否包含参数
获取文件路径
尝试按路径打开文件
不能打开文件时,返回异常信息作为文件内容
获取文件的 MIME 类型
返回该文件
完整 UrlFilter.java 源代码如下
在虚拟机中的效果如图所示
本贴首发于:http://xuekaiyuan.com/forum.php?mod=viewthread&tid=14
将中文文件名重命名为 jarsigner 程序支持的文件名
将文件名按 UTF-8 编码进行 URL 编码。
$encodename = urlencode(iconv('GB2312','UTF-8',$filename));
判断是否和原来的文件名相同
if ($encodename !== $filename) {
如果不相同则重命名
rename($argv[1] . DIRECTORY_SEPARATOR . $filename, $argv[1] . DIRECTORY_SEPARATOR . $encodename);
完整 rename.php 源代码如下
<?php foreach(scandir($argv[1]) as $filename) { $encodename = urlencode(iconv('GB2312','UTF-8',$filename)); if ($encodename !== $filename) { rename($argv[1] . DIRECTORY_SEPARATOR . $filename, $argv[1] . DIRECTORY_SEPARATOR . $encodename); echo 'rename ' . $filename . ' to ' . $encodename . "\n"; } } ?>
在程序中将请求还原成相应的文件名
确定需要判断的路径
String urlprefix = "file:///android_asset/www/";
判断当前请求是否属于该路径
if (url.startsWith(urlprefix)) {
属于该路径时,判断当前请求是否包含参数
if (url.contains("?") || url.contains("#")) {
获取文件路径
String relativePath = "www/" + url.substring(urlprefix.length());
尝试按路径打开文件
stream = cordova.getActivity().getAssets().open(relativePath);
不能打开文件时,返回异常信息作为文件内容
StringWriter stringWriter = new StringWriter(); PrintWriter printWriter = new PrintWriter(stringWriter, true); e.printStackTrace(printWriter); byte[] bytes = new byte[0]; try { bytes = stringWriter.toString().getBytes("UTF-8"); } catch (UnsupportedEncodingException e2) { e2.printStackTrace(); } stream = new ByteArrayInputStream(bytes);
获取文件的 MIME 类型
String mimetype = FileHelper.getMimeType(url, cordova);
返回该文件
return new WebResourceResponse(mimetype, "UTF-8", stream);
完整 UrlFilter.java 源代码如下
public WebResourceResponse shouldInterceptRequest(String url) {
String urlprefix = "file:///android_asset/www/";
if (url.startsWith(urlprefix)) {
if (url.contains("?") || url.contains("#")) {
return super.shouldInterceptRequest(url);
} else {
String relativePath = "www/" + url.substring(urlprefix.length());
InputStream stream;
try {
stream = cordova.getActivity().getAssets().open(relativePath);
} catch (IOException e) {
StringWriter stringWriter = new StringWriter(); PrintWriter printWriter = new PrintWriter(stringWriter, true); e.printStackTrace(printWriter); byte[] bytes = new byte[0]; try { bytes = stringWriter.toString().getBytes("UTF-8"); } catch (UnsupportedEncodingException e2) { e2.printStackTrace(); } stream = new ByteArrayInputStream(bytes);
}
String mimetype = FileHelper.getMimeType(url, cordova);
return new WebResourceResponse(mimetype, "UTF-8", stream);
}
} else {
return super.shouldInterceptRequest(url);
}
}
在虚拟机中的效果如图所示
相关文章推荐
- 在 Cordova/Phonegap for Android 中包含中文文件名的页面
- 在 Cordova/Phonegap for Android 中编写 URL 过滤器
- cordova for android hybrid 程序专题页面宽度大小显示异常问题
- 创建 Cordova/Phonegap for Android 项目
- 在 Cordova/Phonegap for Android 中调用 API
- 创建 Cordova/Phonegap for Android 项目
- 在 Linux 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序
- 在visual studio 2017下用xamarin for android 做个简单的注册页面,包含单选控件,多选控件和下拉菜单控件
- 在 Linux 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序
- 创建 Cordova/Phonegap for Android 项目
- 在 Windows 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序
- Android 解决文件名包含中文 空格和问号问题
- FTPClient实现ftp的上传下载(包含中文文件名和中文路径问题)
- android 解决下载时文件名中文和空格问题
- phonegap使用的初步研究(一)cordovaWebView不能加载外网的页面
- [Cordova/Phonegap] Cordova打包Android,遇到gradle下载失败的解决办法
- 谷歌输入法 GBoard for Android 终于支持中文输入了
- PhoneGap(Cordova)通过插件读取android配置信息
- phonegap android 进行页面跳转
- 中文圣经 for Android