亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSPWiki文件名轉換問題

2024-09-05 00:19:20
字體:
來源:轉載
供稿:網友
國內最大的酷站演示中心!
 這幾天研究了一下jspwiki把網頁存到硬盤上的代碼,想出了一個解決的辦法.
jspwiki把文件名轉換成%xx的格式是為了能在硬盤上存儲各個國家語言的文件,
如果我們只在中文環境下使用,則沒有必要進行這樣的轉換.
 
  jspwiki里的pageprovider和attachmentprovider負責了上面的轉換,
而這兩個provider可以在jspwiki.properties里面設置,所以我們繼承一下
jspwiki里提供的類,再在配置文件里設置一下,很容易就讓jspwiki不進行文
件名轉換了.
 
  我是通過繼承nativefilenameversioningfileprovider和basicattachmentprovider
類實現子類的.可惜basicattachmentprovider中負責文件名轉換的方法是static的,我在
子類里沒辦法把它重載掉,這個問題已經向jspwiki的開發者提出修改意見了.現在page名
可以存為中文了,附件名還要等到jspwiki的basicattachmentprovider修改了以后才能
實現.
 
  附件里是編譯完的代碼,把它拷貝到jspwiki的lib目錄里,再在jspwiki.properties里設置
"jspwiki.pageprovider =net.sf.startemplate.nativefilenameversioningfileprovider"
就可以把page存為中文名的文件了.這個provider和已有的%xx形式的page不能正常工作,
需要把這些page的名稱改成未編碼的中文格式.
 
  至于utf8編碼的文件用notepad修改后會在最前面添加3個字符,那都是微軟做的孽,不用微軟的
或者基于微軟的文本編輯器就行了.(微軟為了識別unicode的編碼,在文件最開始加了標識符,
而其他公司并不承認這個標準,所以才導致這些標識符會被顯示出來)
 
  瀏覽器對網址會轉換成%xx形式后再向服務器,服務器收到以后也都有相應的逆向轉換,這個應該
沒有什么問題.
 
  很高興和你交流!!
 
  以下是我的代碼:兩個provider和一個工具類
 
 
   1:/**
2: * created on 2005-9-8 by dengber.
3: */
4:package net.sf.startemplate;
5:
6:import org.apache.log4j.logger;
7:
8:import com.ecyrd.jspwiki.providers.versioningfileprovider;
9:
10:/**
11: * a privider for jspwiki.
12: * this class behaves the same with <code>versioningfileprovider</code> provided
13: * by jspwiki,excepting it saves wiki pages into harddisk with the name inputted
14: * by the user. this is different with <code>versioningfileprovider</code>, it
15: * will save wiki pages with a encoded name, such as %e6%b5%8b%e8%af%95.
16: * though it is a good solution to save files whos name may contains any
17: * charachers in the world, it is not readable.
18: * <br /><br />
19: * for many people, they use jspwiki only in a intranet, the character problem
20: * above is nothing to them. saving wiki pages with the native charachter names
21: * may working well to them. so this class is a choice to that people: the wiki
22: * pages in harddisk have a readable name.
23: * <br /><br />
24: * danger: if the jspwiki user can input a character that can not be proccessed
25: * by your server, not use this class.
26: * <br /><br />
27: * how to use:copy the jar file that contains this class to <b>lib</b>
28: * directory of your jspwiki webapp, and set the following value to
29: * jspwiki.properties:
30: * jspwiki.pageprovider=net.sf.startemplate.nativefilenameversioningfileprovider
31: *
32: * @author dengber [email protected]
33: *
34: */
35:public class nativefilenameversioningfileprovider extends
36: versioningfileprovider {
37: private static final logger log = logger
38: .getlogger(nativefilenameversioningfileprovider.class);
39:
40: /**
41: * convert string to the formatting that can be as file name.
42: *
43: * @param pagename
44: * @return
45: */
46: protected string manglename(string pagename) {
47: final string[] windows_device_names = { "con", "prn", "nul",
48: "aux", "lpt1", "lpt2", "lpt3", "lpt4", "lpt5", "lpt6", "lpt7",
49: "lpt8", "lpt9", "com1", "com2", "com3", "com4", "com5", "com6",
50: "com7", "com8", "com9" };
51:
52: log.debug("manglename(" + pagename + ")");
53: pagename = textutil.encodefilename(pagename);
54:
55: boolean windowshackneeded = false;
56: string os = system.getproperty("os.name").tolowercase();
57:
58: if (os.startswith("windows") || os.equals("nt")) {
59: windowshackneeded = true;
60: }
61:
62: if (windowshackneeded) {
63: string pn = pagename.tolowercase();
64: for (int i = 0; i < windows_device_names.length; i++) {
65: if (windows_device_names[i].equals(pn)) {
66: pagename = "$$$" + pagename;
67: }
68: }
69: }
70:
71: log.debug("manglename()=" + pagename);
72: return pagename;
73: }
74:
75: /**
76: * convert string converted by <code>manglename()</code> to its orginal
77: * value.
78: *
79: * @param pagename
80: * @return
81: */
82: protected string unmanglename(string pagename) {
83: log.debug("unmanglename(" + pagename + ")");
84: boolean windowshackneeded = false;
85: string os = system.getproperty("os.name").tolowercase();
86:
87: if (os.startswith("windows") || os.equals("nt")) {
88: windowshackneeded = true;
89: }
90:
91: if (windowshackneeded && pagename.startswith("$$$")
92: && pagename.length() > 3) {
93: pagename = pagename.substring(3);
94: }
95:
96: log.debug("unmanglename()=" + pagename);
97: return textutil.decodefilename(pagename);
98: }
99:
100:}
101:
 
 
   1:/**
2: * created on 2005-9-11 by dengber.
3: */
4:package net.sf.startemplate;
5:
6:import org.apache.log4j.logger;
7:
8:import com.ecyrd.jspwiki.providers.basicattachmentprovider;
9:
10:/**
11: * a privider for jspwiki.
12: * this class behaves the same with <code>versioningfileprovider</code> provided
13: * by jspwiki,excepting it saves wiki pages into harddisk with the name inputted
14: * by the user. this is different with <code>versioningfileprovider</code>, it
15: * will save wiki pages with a encoded name, such as %e6%b5%8b%e8%af%95.
16: *
17: * @see net.sf.startemplate.nativefilenameversioningfileprovider
18: *
19: * @author dengber [email protected]
20: *
21: */
22:public class nativefilenameattachmentprovider extends basicattachmentprovider {
23: private static final logger log = logger.getlogger(nativefilenameattachmentprovider.class);
24:
25: /**
26: * convert string to the formatting that can be as file name.
27: *
28: * @param pagename
29: * @return
30: */
31: protected string manglename(string pagename) {
32: log.debug("manglename(" + pagename + "");
33: return textutil.encodefilename(pagename);
34: }
35:
36: /**
37: * convert string converted by <code>manglename()</code> to its orginal
38: * value.
39: *
40: * @param pagename
41: * @return
42: */
43: protected string unmanglename(string pagename) {
44: log.debug("unmanglename(" + pagename + "");
45: return textutil.decodefilename(pagename);
46: }
47:}
48:
 
 
   1:/**
2: * created on 2005-9-11 by dengber.
3: */
4:package net.sf.startemplate;
5:
6:import org.apache.log4j.logger;
7:
8:/**
9: * a utility class for string processing.
10: *
11: * @author dengber [email protected]
12: *
13: */
14:public class textutil {
15:
16: /**
17: * encode //:*?<>|% to %nn%nn formatting.
18: *
19: * @param filename
20: * @return
21: */
22: public static string encodefilename(string filename) {
23: stringbuffer result = new stringbuffer();
24: final string hex_digits = "0123456789abcdef";
25:
26: for (int i = 0; i < filename.length(); i++) {
27: char c = filename.charat(i);
28: switch (c) {
29: case '//':
30: case '/':
31: case ':':
32: case '*':
33: case '?':
34: case '/"':
35: case '<':
36: case '>':
37: case '|':
38: case '%':
39: result.append('%');
40: //the character above is all one-byte character,
41: //so we only need to encode the most right 8 bit.
42: result.append(hex_digits.charat((c & 0xf0) >> 4));
43: result.append(hex_digits.charat(c & 0x0f));
44: break;
45: default:
46: result.append(c);
47: }
48: }
49:
50: return result.tostring();
51: }
52:
53: /**
54: * decode %nn%nn formatting string to its orginal value .
55: *
56: * @param filename
57: * @return
58: */
59: public static string decodefilename(string filename) {
60: stringbuffer result = new stringbuffer();
61:
62: for (int i = 0; i < filename.length(); i++) {
63: char c = filename.charat(i);
64: switch (c) {
65: case '%':
66: char upper = filename.charat(++i);
67: char lower = filename.charat(++i);
68: char ch = (char) integer.parseint("" + upper + lower, 16);
69: result.append(ch);
70: break;
71:
72: default:
73: result.append(c);
74: break;
75: }
76: }
77:
78: return result.tostring();
79: }
80:
81:}
82:
 
 
 
======= 2005-09-07 22:26:40 您在來信中寫道:=======
 
> dengber,您好!
>
> 我從sf.net上面下載了你的startemplate,看看不錯。
>
> 我最近正在將jspwiki部署到我公司上,作為一種工作日志、工作總結、技術文章的共享平臺。有個問題想問你一下,不知道你是
否了解,如何讓jspwiki里面用中文寫的超級鏈接,所形成的實際文件名,可以成為中文編碼呢?因為目前都會變成%xx%xx的形式
來表示中文。
>
> 我知道jspwiki是利用java寫的,它的中文處理機制,完全就是java的機制,就是將所有編碼,統一成utf-8編碼。而windows200
0或以上的系統的默認編碼,一般是unicode,這兩者不太一樣。我不知道你試過直接編輯jspwiki的數據文件沒,我試過,發現只
能利用ultraedit之類的可以支持utf-8的編輯器,才可以成功編寫,而如果利用windows自帶的notepad來編輯的話,其文件頭部
會自動被加上3個字節。
>
> 另外,當在瀏覽器里面,鼠標指向一個含中文字符的鏈接的時候,會被自動轉換成可能試url所要求的表示形式,就是上述的兩個
加了百分號的數字來表示一個漢字的方式。
>
> 所以我想,要想解決這個問題,是不是需要解決上述兩個問題。
>
> 不知道你是否研究過這個,請不吝賜教?! ?/div>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕视频在线| 亚洲欧洲第一视频| 久久精品国产亚洲精品| 国内伊人久久久久久网站视频| 成人动漫网站在线观看| 国产亚洲精品久久久| 精品国模在线视频| 国产精品r级在线| 国产精品影院在线观看| www.久久草.com| 九九精品在线视频| 国产精品免费久久久久影院| 欧美香蕉大胸在线视频观看| 亚洲va欧美va国产综合剧情| 亚洲成人网在线观看| 国产免费一区二区三区在线观看| 国产精品久久久久久av下载红粉| 亚洲人精品午夜在线观看| www.国产精品一二区| 欧美激情a在线| 国产精品久久婷婷六月丁香| 久久久久久国产精品美女| 中文在线不卡视频| 91中文字幕在线| 中文字幕欧美在线| 亚洲最新在线视频| 亚洲精品456在线播放狼人| 欧美麻豆久久久久久中文| 精品一区二区三区四区在线| 亚洲国产福利在线| 国产一区二区精品丝袜| 91av在线免费观看| 精品久久久视频| 欧美激情一区二区三区久久久| 国产ts人妖一区二区三区| 久久精品国产亚洲| 国产一区二区三区18| 夜夜狂射影院欧美极品| 国产亚洲免费的视频看| 亚洲第一精品福利| 亚洲人成在线播放| 国产欧美一区二区三区久久人妖| 欧美激情视频一区二区| 亚洲国产精品yw在线观看| 中文字幕日韩精品有码视频| 欧美日韩亚洲网| 日韩最新在线视频| 日韩成人激情视频| 日韩中文在线中文网三级| 久久综合伊人77777尤物| 亚洲欧美激情四射在线日| 精品一区二区三区四区在线| 亚洲人成欧美中文字幕| 欧美日韩国产成人在线| 亚洲美女又黄又爽在线观看| 日韩美女免费视频| 国产精品免费久久久久影院| 亚洲精品91美女久久久久久久| 欧美国产精品人人做人人爱| 欧美国产欧美亚洲国产日韩mv天天看完整| 在线日韩av观看| 91久久久亚洲精品| 欧美国产亚洲精品久久久8v| 国产精品com| 永久555www成人免费| 久久久久久久影视| 亚洲一区二区三区视频播放| 久久亚洲精品中文字幕冲田杏梨| 一区二区三区无码高清视频| 国产精品久久久久久久久久东京| 色婷婷成人综合| 亚洲字幕一区二区| 亚洲bt欧美bt日本bt| 久久久国产精品免费| 狠狠躁夜夜躁久久躁别揉| 亚洲欧美精品一区二区| 高跟丝袜一区二区三区| 精品无人区太爽高潮在线播放| 欧美大片大片在线播放| 97视频网站入口| 国产一区二区三区免费视频| 欧美在线一区二区视频| 日韩精品亚洲视频| 亚洲第一中文字幕| 国产欧美 在线欧美| 美日韩精品免费观看视频| 91精品国产色综合| 欧美成年人视频网站欧美| 亚洲欧美激情四射在线日| 日韩美女中文字幕| 亚洲精品91美女久久久久久久| 一区二区三区视频观看| 7777精品视频| 久久91亚洲精品中文字幕奶水| 97人洗澡人人免费公开视频碰碰碰| 国产综合久久久久久| 色无极影院亚洲| 日韩在线观看免费高清完整版| 日韩国产在线播放| 欧美日韩福利在线观看| 57pao成人永久免费视频| 久久成人国产精品| 精品综合久久久久久97| 亚洲色图色老头| 中文字幕欧美国内| 欧美电影在线免费观看网站| 亚洲激情国产精品| 国产精品久久久久久久av电影| 亚洲天堂开心观看| 亚洲网址你懂得| 91亚洲永久免费精品| 亚洲va久久久噜噜噜久久天堂| 91久久国产精品91久久性色| 久久伊人精品一区二区三区| 欧美孕妇与黑人孕交| 国产精品678| 成人国产精品免费视频| 日韩精品有码在线观看| 在线观看久久久久久| 91视频免费网站| 久久国产精品影视| 国产午夜精品理论片a级探花| 一区二区三欧美| 在线播放国产一区中文字幕剧情欧美| 中文字幕不卡av| 国产精品v片在线观看不卡| 亚洲日本中文字幕免费在线不卡| 精品免费在线视频| 欧美黄色免费网站| 最近2019年中文视频免费在线观看| 亚洲精品国产品国语在线| 亚洲色图狂野欧美| 国产精品黄色影片导航在线观看| 亚洲日本中文字幕免费在线不卡| 久久久久五月天| 日本在线观看天堂男亚洲| 精品一区二区三区四区在线| 精品视频在线导航| 国产91露脸中文字幕在线| 91黄色8090| 国产欧美va欧美va香蕉在线| 欧美日韩成人精品| 一本色道久久88精品综合| 久久人人爽人人爽人人片av高请| 日韩成人av网| 26uuu国产精品视频| 高清一区二区三区四区五区| 久久久久久久久久久免费| 国产亚洲视频中文字幕视频| 丁香五六月婷婷久久激情| 亚洲aⅴ男人的天堂在线观看| 欧美电影免费观看高清| 91精品国产成人| 亚洲www永久成人夜色| 久久久久久中文| 久久久中精品2020中文| 日韩女优人人人人射在线视频| 久久久精品久久久| 亚洲国产精品福利| 中文字幕不卡在线视频极品| 国产精品久久一| 国产精品成人国产乱一区| 北条麻妃久久精品| 国产一区二区三区18|