国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

水力發(fā)電廠監(jiān)控系統(tǒng)小語種軟件國際化策略

2021-05-19 01:13:44鮑艷香
西北水電 2021年2期
關(guān)鍵詞:字符集編碼方式前臺

孫 毅 ,鮑艷香

(1.南京南瑞水利水電科技有限公司,南京 210003;2.水利部水文儀器及巖土工程儀器質(zhì)量監(jiān)督檢驗(yàn)測試中心,南京 210012)

0 前 言

隨著這些年中國水力發(fā)電廠監(jiān)控技術(shù)的日趨成熟,越來越多的國外水力發(fā)電廠項(xiàng)目開始使用國內(nèi)水力發(fā)電廠監(jiān)控產(chǎn)品。與2000—2010年已實(shí)施過的部分國外項(xiàng)目不同,新的需求不再僅是單一的英文版軟件,法文、西班牙文、葡萄牙文等其他語言版本軟件需求也逐漸出現(xiàn)。為了滿足小語種國際化項(xiàng)目的需求,南京南瑞水利水電科技有限公司開發(fā)了新一代國際化水力發(fā)電廠監(jiān)控軟件產(chǎn)品(SC2000)。早期的水力發(fā)電廠監(jiān)控軟件因?yàn)橹恍枰С种形募坝⑽模褂昧恕癎BK”字符集,該字符集可支持所有的簡體中文、繁體中文、英文等字符,但無法兼容某些小語種中的一些特殊字符,如:ê、、?等等。實(shí)際上,在現(xiàn)在的軟件開發(fā)中,更為廣泛使用的是“UTF-8”字符集,這一字符集可以兼容幾乎所有的字符,包括小語種中的各種特殊字符。因此,如果需要兼容各種小語種,還需將軟件使用的字符集更改為“UTF-8”字符集。然而,傳統(tǒng)的軟件前后臺采用了不同的編程語言,前臺為JAVA語言,后臺為C語言,兩者之間的各類信息傳輸都使用了“GBK”字符集作為編碼模式,如果僅修改其中某一方的編碼方式,會造成前后臺字符集的不兼容,導(dǎo)致軟件出現(xiàn)大量亂碼。并且原來的軟件中,大量配置文件也使用了“GBK”編碼,直接對軟件編碼方式進(jìn)行修改,會造成無法兼容以前的項(xiàng)目,對后續(xù)的維護(hù)工作造成嚴(yán)重的影響,需進(jìn)行軟件版本的分支。

1 軟件國際化及字符集

1.1 何為軟件國際化

軟件國際化最終需要實(shí)現(xiàn)的目標(biāo)是:在不對軟件進(jìn)行重新編碼或者替換運(yùn)行文件的基礎(chǔ)上,可以通過只修改一個運(yùn)行參數(shù),或者直接在界面上選擇的方式,切換軟件界面上顯示的語言。一般實(shí)現(xiàn)目標(biāo)的策略:在軟件中所有需要出現(xiàn)文本顯示的地方,都避免在軟件中采用硬編碼,通過鍵值對查找策略來實(shí)現(xiàn),即在代碼中需要顯示文本的地方,通過某一個“key”,去找出資源文件中對應(yīng)的“value”,最終把“value”顯示出來?!発ey”是固化在軟件源代碼中,而獲取 “value”可以根據(jù)配置不同,去獲取資源文件中不同的語言文字。

總體來說,軟件國際化是一套成熟的軟件所必備的體系,對軟件的可維護(hù)性、可擴(kuò)展性都有極大的幫助,比如避免在需要修改軟件語言時,需要去對軟件進(jìn)行重寫編碼。

1.2 字符集

字符是各種文字和符號的總稱,包括各國家文字、標(biāo)點(diǎn)符號、圖形符號、數(shù)字等。而字符集是多個字符的集合,字符集種類較多,每個字符集包含的字符個數(shù)不同,常見字符集有ASCII字符集、GBK字符集、UTF-8字符集、UTF-16字符集、ISO-8859-1字符集。在列出的5種字符集中,除ASCII字符集外,其余均支持簡體漢字。計算機(jī)要準(zhǔn)確的處理各種字符集文字,就需要進(jìn)行字符編碼,以便計算機(jī)識別和存儲各種文字。其中,ASCII字符集包含所有的基本計算機(jī)字符,包括阿拉伯?dāng)?shù)字、英文大小寫字母,部分特殊字符如:!@#$%^&*()-+=;’,.等;GBK字符集包含所有的中文字及所有的ASCII字符;UTF-8字符集包含所有的中文字符,各類小語種的特殊字符及所有的ASCII字符。這些字符集中,所有ASCII字符(半角英文字母及半角標(biāo)點(diǎn)符號)的編碼方式相同,但漢字及ê、、?等特殊字符的編碼方式有區(qū)別。為了更清晰地說明編碼方式引起的字節(jié)信息差異,本文結(jié)合以下代碼段進(jìn)行分析:

System.out.println(“UTF-8:”+ byteArray2BinaryString(“中”.getBytes(“utf8”)));

System.out.println(“GBK:”+ byteArray2BinaryString(“中”.getBytes(“gbk”)));

這段代碼實(shí)現(xiàn)的是對于漢字“中”分別進(jìn)行UTF-8和GBK編碼。

運(yùn)行結(jié)果如下:

UTF-8: 11100100 10111000 10101101

GBK: 11010110 11010000

運(yùn)行結(jié)果顯示,“中”這個字在UTF-8編碼方式下,其2進(jìn)制表示為:

11100100 10111000 10101101

而“中”這個字在GBK編碼方式下,其2進(jìn)制表示為:

11010110 11010000

可以看出,同一漢字在2個不同的字符集中,其字節(jié)碼是不一樣的,甚至長度都不一樣。所以,要想讓其它程序識別一段字節(jié)碼所表示字符,首先要明確其使用的是哪一種字符集,如果編碼方與解碼方使用的字符集不同,會出現(xiàn)“亂碼”情況。

若軟件需要兼容法文、西班牙文、葡萄牙文等小語種,則在前端程序中必須使用UTF-8字符集。對于以GBK字符集為基礎(chǔ)的現(xiàn)有軟件,如何在滿足兼容性要求的前提下實(shí)現(xiàn)字符集的轉(zhuǎn)換,是解決軟件增加小語種兼容問題的關(guān)鍵所在。

1.3 UTF-8與GBK的交集

根據(jù)各類型字符集的范圍可以推斷,雖然UTF-8字符集和GBK字符集存在顯著差異,但是它們的ASCII字符部分的編碼方式一致??梢圆捎孟率龃a段進(jìn)行分析驗(yàn)證:

System.out.println(“UTF-8: ”+ byteArray2BinaryString(“A”.getBytes(“utf8”)));

System.out.println(“GBK: ”+ byteArray2BinaryString(“A”.getBytes(“gbk”)));

這段代碼實(shí)現(xiàn)的是對于英文字符“A”分別進(jìn)行UTF-8和GBK編碼。

運(yùn)行結(jié)果如下:

UTF-8: 1000001

GBK: 1000001

運(yùn)行結(jié)果顯示,“A”這個字符在UTF-8編碼方式和GBK編碼方式下,其2進(jìn)制表示均為:1000001。說明上述2種字符集存在相通部分(ASCII部分),并存在利用其來實(shí)現(xiàn)GBK與UTF-8字符集之間信息交互的可能性。因此,不需要對前后臺所有的程序全部進(jìn)行字符集修改,僅需修改前臺程序的字符集,可實(shí)現(xiàn)既保持軟件兼容性又確保軟件改動最小的目標(biāo)。

2 兼容策略

2.1 策略分析

要判斷是否僅修改前臺程序的字符集,首先要分析前后臺程序之間有哪些需要交互的文本信息,具體如下:

(1) 監(jiān)控簡報信息,主要包括:開關(guān)量動作信息、模擬量越限信息、順控流程信息、節(jié)點(diǎn)狀態(tài)信息、進(jìn)程狀態(tài)信息、控制操作信息、各類通信程序上報信息等。

(2) 后臺歷史記錄,即監(jiān)控簡報信息中各類信息的歷史記錄。

(3) 各類前后臺都需要加載的配置文件。

在原系統(tǒng)中上述各類信息均采用GBK編碼方式。針對前后臺程序共用的配置文件,可分2種情況來考慮:① 對于無需進(jìn)行國際化內(nèi)容的配置文件,可保留使用GBK字符集,在前臺程序?qū)ζ溥M(jìn)行解析或保存時,依然指定使用GBK字符集即可[1];② 對于含國際化處理的文本信息的配置文件,需改為使用UTF-8字符集,并且通過修改程序邏輯的方式,避免后臺程序直接讀取此類配置文件中的文本內(nèi)容。針對監(jiān)控簡報信息及其歷史記錄,需分類進(jìn)行討論。

最常見的一類為水力發(fā)電廠的開關(guān)量動作信息、模擬量越限信息。此類信息通常為電氣信號,其原理為:外部設(shè)備通過硬接線接入監(jiān)控系統(tǒng)的PLC,PLC模件通過網(wǎng)絡(luò)通信將這些電氣信號上送至上位機(jī),上位機(jī)軟件則根據(jù)信號的順序在模型庫中對測點(diǎn)模型進(jìn)行預(yù)定義,這些測點(diǎn)的描述會存放在監(jiān)控系統(tǒng)的上位機(jī)模型庫中。原有的告警策略為在后臺程序中直接組織好完整的簡報信息之后發(fā)送給前臺進(jìn)行展示。然而實(shí)際上前臺模型庫中本身就存放了測點(diǎn)的描述信息,在后臺直接發(fā)布完整的告警信息的策略確實(shí)略顯粗糙,實(shí)際上只要將測點(diǎn)的ID信息、測值、動作性質(zhì)等數(shù)據(jù)發(fā)布至前臺,前臺可根據(jù)這些信息重新組織出需要展示的簡報[2]。為了避免后臺程序無法解析的小語種特殊字符,采用了后臺程序僅發(fā)布測點(diǎn)ID、動作性質(zhì)、測值等數(shù)據(jù),由前臺程序重新組織出最終告警信息的策略,解決了上位機(jī)網(wǎng)絡(luò)環(huán)境中需要多種語言的系統(tǒng)同時存在的難題。

另一類信息為水力發(fā)電廠監(jiān)控系統(tǒng)中的順控流程信息、節(jié)點(diǎn)狀態(tài)信息、進(jìn)程狀態(tài)信息、控制操作信息、各類通信程序上報信息。此類信息通常為非電量信號,大部分都是通過外部系統(tǒng)通訊上送,或者由后臺程序在系統(tǒng)運(yùn)行過程中,根據(jù)實(shí)際需要動態(tài)生成的告警信息。此類信息的特點(diǎn)是具有不確定性,大部分信息無法在數(shù)據(jù)模型中進(jìn)行預(yù)定義。針對此類信號,原有策略為在后臺程序中直接組織好完整的簡報信息之后發(fā)送給前臺進(jìn)行展示,此類信息不含有其它附加信息。由于此類信息無法通過測點(diǎn)信息進(jìn)行重組,后臺程序不再發(fā)送組織好的完整簡報信息,可改為發(fā)送根據(jù)一套前后臺約定好的策略組織出來的碼值(只使用ASCII字符)。前臺程序收到碼值后,根據(jù)前后臺碼值轉(zhuǎn)換規(guī)約(詳見2.2)以及碼值信息對照表解譯出需要展示的信息。

2.2 前后臺碼值轉(zhuǎn)換規(guī)約

流程、通訊類信息需要進(jìn)行碼值轉(zhuǎn)換,轉(zhuǎn)換前需要提前獲得以下幾個要素:

(1) 如何確定此類信息是一條進(jìn)行了碼值轉(zhuǎn)換的信息;

(2) 從哪里獲取碼值與文本的對應(yīng)關(guān)系;

(3) 哪些內(nèi)容需要根據(jù)碼值進(jìn)行轉(zhuǎn)換。

明確以上要素,可設(shè)計出對應(yīng)的碼值轉(zhuǎn)換規(guī)約[3],具體方法如下:

在信息的開頭,用<[filename]>的格式,來告知前臺文本信息存放的配置文件,其中filename即文件名。因此,開頭“<[”連續(xù)的兩個字符,可以作為這是一條需要進(jìn)行碼值轉(zhuǎn)換信息的標(biāo)記。

用<#1.1.1.3.5#>的格式,來告知前臺測點(diǎn)ID。例如其中1.1.1.3.5就是一個測點(diǎn)ID,前臺程序可以根據(jù)此ID將之轉(zhuǎn)換為對應(yīng)的測點(diǎn)描述。

用<%2,11%>的格式,來告知前臺具體的碼值信息。例如2和11中的2表示碼值的第一級關(guān)鍵字,11表示碼值的第二級關(guān)鍵字[4]。

如圖1所示,“key”列即為在文章開頭提到過的“key”。

碼值信息對照表的標(biāo)準(zhǔn)格式見圖1,其中第1列為一級關(guān)鍵字,第2列為二級關(guān)鍵字,第3列為保留信息,第4列為文本信息。例如后臺發(fā)送碼值“<[lcu1.info]> LCU1<%2,11%>”至前臺。

前臺收到信息后,開始解析[5]:

“<[lcu1.info]>”表示信息對照配置文件名,其內(nèi)容即為圖1所示;

圖1 碼值信息對照表

“LCU1”為原始字符串,不需要進(jìn)行碼值轉(zhuǎn)換;

“<%2,11%>”為碼值信息,第1級關(guān)鍵字2,第2級關(guān)鍵字11,經(jīng)過解析找到對應(yīng)的信息:“有其他流程在執(zhí)行,流程退出”。

最終完整的信息為:“LCU1有其他流程在執(zhí)行,流程退出”。

3 國際化資源管理策略

系統(tǒng)的前臺程序采用JAVA語言編碼,JAVA默認(rèn)的國際化資源管理方式為properties鍵值對文件,每一個國際化語言,對應(yīng)一個單獨(dú)的資源文件。然而,該模式不便于資源的整體管理。由于資源分散在各個文件中,易出現(xiàn)不同語言的資源文件中的信息數(shù)量不一致,導(dǎo)致出現(xiàn)前臺信息缺失的現(xiàn)象[6]。

因此,新一代水力發(fā)電廠監(jiān)控軟件(SC2000)使用了統(tǒng)一的文件管理模式,所有的資源信息全部放在同一個資源文件中。系統(tǒng)自動根據(jù)預(yù)先的配置,獲取不同列中的信息來進(jìn)行展示[7]:

如圖2所示,“key”列即為在文章開頭提到過的“key”。“cn”列為中文,“en”列為英文,“fr”列為法文,“sp”列為西班牙語,“pt”列為葡萄牙語。上述幾列均為前文提到的“value”,系統(tǒng)根據(jù)配置的不同,選取對應(yīng)列中的“value”進(jìn)行展示[8]。

圖2 國際化資源文件

4 應(yīng) 用

水電站工程新一代水力發(fā)電廠監(jiān)控軟件(SC2000)已在以下項(xiàng)目中應(yīng)用:

(1) 贊比亞卡里巴水電站(中文、英語),累計安全運(yùn)行超過2 650 d。

(2) 哥斯達(dá)黎加凱奇水電站(西班牙語),累計安全運(yùn)行超過2 200 d。

(3) 越南松針?biāo)娬?中文、英語),累計安全運(yùn)行超過960 d。

(4) 馬里古伊那水電站(法語),累計安全運(yùn)行超過360 d。

(5) 洪都拉斯帕圖卡III水電站(中文、英語、西班牙語),累計安全運(yùn)行超過110 d。

(6) 老撾南公水電站(中文、英語、法語),投運(yùn)中。

在大量國際化項(xiàng)目的應(yīng)用中,SC2000軟件以穩(wěn)定、安全、可靠的性能獲得了用戶的認(rèn)可。在同時使用多種語言的現(xiàn)場環(huán)境中,展現(xiàn)出了自身的優(yōu)勢。南京南瑞水利水電科技有限公司近期承接的水力發(fā)電廠監(jiān)控項(xiàng)目,也全部采用了SC2000軟件。隨著越來越多的國際化項(xiàng)目的出現(xiàn),SC2000軟件將擁有更加廣闊的應(yīng)用空間。

猜你喜歡
字符集編碼方式前臺
MySQL數(shù)據(jù)庫字符集的問題研究
ORACLE字符集問題的分析
公路電助力 從幕后走向前臺
中國自行車(2018年6期)2018-07-23 03:17:24
孟晚舟:從前臺打雜到華為副總裁
海峽姐妹(2018年6期)2018-06-26 07:27:15
GCOA算法
價值工程(2017年22期)2017-07-15 04:21:23
ORACLE數(shù)據(jù)庫字符集問題及解決方法
可穿戴式多通道傳感系統(tǒng)功能需求分析及設(shè)計
醫(yī)院信息系統(tǒng)Oracle數(shù)據(jù)庫中導(dǎo)入數(shù)據(jù)中文亂碼的解決技術(shù)
混合編碼方式自適應(yīng)差分進(jìn)化算法優(yōu)化設(shè)計寬帶天線
前臺、后臺精彩花絮停不了
阜城县| 都昌县| 双桥区| 确山县| 克东县| 皋兰县| 泰兴市| 夏津县| 福泉市| 承德县| 宁津县| 江达县| 呼图壁县| 九台市| 海丰县| 东兰县| 洪江市| 扶沟县| 日照市| 唐河县| 海南省| 垦利县| 新巴尔虎左旗| 蓬莱市| 屯门区| 衡山县| 扬中市| 城口县| 政和县| 天峻县| 分宜县| 金川县| 南和县| 连江县| 武功县| 抚宁县| 富阳市| 铁力市| 玉田县| 乌鲁木齐市| 巴彦淖尔市|