亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        孫 毅 ,鮑艷香

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

        0 前 言

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

        1 軟件國際化及字符集

        1.1 何為軟件國際化

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

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

        1.2 字符集

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

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

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

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

        運行結(jié)果如下:

        UTF-8: 11100100 10111000 10101101

        GBK: 11010110 11010000

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

        11100100 10111000 10101101

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

        11010110 11010000

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

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

        1.3 UTF-8與GBK的交集

        根據(jù)各類型字符集的范圍可以推斷,雖然UTF-8字符集和GBK字符集存在顯著差異,但是它們的ASCII字符部分的編碼方式一致。可以采用下述代碼段進行分析驗證:

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

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

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

        運行結(jié)果如下:

        UTF-8: 1000001

        GBK: 1000001

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

        2 兼容策略

        2.1 策略分析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        圖1 碼值信息對照表

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

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

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

        3 國際化資源管理策略

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

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

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

        圖2 國際化資源文件

        4 應(yīng) 用

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

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

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

        (3) 越南松針水電站(中文、英語),累計安全運行超過960 d。

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

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

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

        在大量國際化項目的應(yīng)用中,SC2000軟件以穩(wěn)定、安全、可靠的性能獲得了用戶的認可。在同時使用多種語言的現(xiàn)場環(huán)境中,展現(xiàn)出了自身的優(yōu)勢。南京南瑞水利水電科技有限公司近期承接的水力發(fā)電廠監(jiān)控項目,也全部采用了SC2000軟件。隨著越來越多的國際化項目的出現(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ù)庫中導入數(shù)據(jù)中文亂碼的解決技術(shù)
        混合編碼方式自適應(yīng)差分進化算法優(yōu)化設(shè)計寬帶天線
        前臺、后臺精彩花絮停不了
        風采童裝(2016年2期)2016-08-02 09:18:38
        人妻av一区二区三区av免费| 国产日韩欧美一区二区东京热| 天堂а在线中文在线新版| 亚洲av无码av男人的天堂| 18禁美女裸体网站无遮挡| 亚洲一区不卡在线导航| 日韩人妻大奶子生活片| 粉嫩av最新在线高清观看| 国产成人精品一区二区三区| 国产呦系列呦交| 久久久精品电影| 在线一区二区三区免费视频观看 | 樱花AV在线无码| 日韩av在线不卡观看| 日本高级黄色一区二区三区| 欧美性猛交99久久久久99按摩| 亚洲男人av天堂午夜在| 国产成人户外露出视频在线| 精品少妇后入一区二区三区| 国产黄色一区二区在线看| 日韩一区二区三区无码影院| 国产成人无码区免费内射一片色欲| 亚洲丁香五月激情综合| 日韩精品免费一区二区中文字幕 | 国产肥熟女视频一区二区三区| 麻豆人妻性色av专区0000| 美女不带套日出白浆免费视频| 日本阿v网站在线观看中文| 欧美综合区自拍亚洲综合| 在线观看高清视频一区二区三区| 日韩 亚洲 制服 欧美 综合| 50岁熟妇大白屁股真爽| 国产精品丝袜美女在线观看| 国产精品黄色在线观看| 日本免费视频| 国产麻豆剧传媒精品国产av| 青青草视频网站免费观看| 少妇太爽高潮在线播放| 激情内射亚洲一区二区三区| 99久久国产福利自产拍| 91精品欧美综合在线观看|