024_输入输出字符集
1. 像其它大多數(shù)的Java應用程序一樣, FreeMarker使用"UNICODE文本"(UTF-16)來工作。不過, 也有必須處理字符集的情況, 因為它不得不和外界交換數(shù)據(jù), 這就會使用到很多字符集。
2. 輸入的字符集
2.1. 當FreeMarker要加載模板文件(或沒有解析的文本文件)時, 那就必須要知道文件使用的字符集。可以使用encoding配置來確定字符集。這個配置項只在FreeMarker使用Configuration對象的getTemplate方法加載模板(解析過的或沒有解析過的)時起作用。請注意include指令在內(nèi)部也使用了這個方法。
2.2. encoding配置的getter和setter方法在第一個(配置)層面很特殊。getter方法猜想返回值是基于Locale(本地化)傳遞的參數(shù); 它在地圖區(qū)域編碼表(稱為編碼地圖)中查詢編碼, 如果沒有找到該區(qū)域, 就返回默認編碼。可以使用配置對象的setEncoding(Locale locale, String encoding)方法來填充編碼表; 編碼表初始化時是空的。默認的初始編碼是系統(tǒng)屬性file.encoding的值, 但是可以通過setDefaultEncoding方法來設置一個不同的默認值, 而不是依賴它。對于新項目來說, 默認的編碼設置就是utf-8。
2.3. 也可以在運行環(huán)境層直接給定值來覆蓋encoding的設置。
2.4. 也可以在模板文件中使用ftl指令, 比如: <#ftl encoding="utf-8">來指定特定的字符集。
2.5. 請注意, 模板使用的字符集和模板生成的輸出內(nèi)容的字符集是獨立的。
3. 輸出的字符集
3.1. 原則上, FreeMarker不處理輸出內(nèi)容的字符集問題, 因為FreeMarker將輸出內(nèi)容都寫入了java.io.Writer對象中。而Writer對象是由封裝了FreeMarker(比如Web應用框架)的軟件生成的, 那么輸出內(nèi)容的字符集就是由封裝軟件來控制的。
3.2. 而FreeMarker有一個稱為output_encoding的設置。封裝軟件應該使用這個設置(Writer對象使用的字符集)來通知FreeMarker在輸出中(否則FreeMarker不能找到它)使用哪種字符集。
3.3. 有一些新的特性, 如內(nèi)建函數(shù)url, 特殊變量output_encoding也利用這個信息。因此, 如果封裝軟件沒有設置字符集這個信息, 那么FreeMarker需要知道輸出字符集的特性就不能被利用了。
3.4. 如果你使用FreeMarker來編寫軟件, 你也許想知道在輸出內(nèi)容中到底選擇了哪種字符集。當然這取決于運行FreeMarker輸出內(nèi)容的計算機本身, 但是如果用戶對這個問題可以變通, 那么通用的實踐是使用模板文件的字符集作為輸出的字符集, 或者使用UTF-8。通常使用UTF-8是最佳的實踐。
總結
以上是生活随笔為你收集整理的024_输入输出字符集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 023_运行时变量和范围
- 下一篇: 051_元素之间空白间隙解决方案