專利名稱:短信處理方法以及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種通信方法及裝置,特別是涉及一種短信處理方法以及裝置。
背景技術(shù):
全球信息化為移動通信中的短信(SM,Short Message)通信提供極大的發(fā)展前景。據(jù)中國信息產(chǎn)業(yè)部2006年5月21日的最新統(tǒng)計顯示,2006年1至4月,手機短信量達(dá)到1322.5億條,比上年同期增長46.5%。
短信通信數(shù)量的飛速增長以及其龐大的增長基數(shù),一方面說明短信通信的技術(shù)優(yōu)勢明顯,另一方面也表明短信市場很大。由于短信通信已經(jīng)成為移動用戶常用的通信方式,用戶為此需要負(fù)擔(dān)一定的費用。隨著短信使用量的激增,該類費用增長迅速。其中,長短信成為加重用戶費用負(fù)擔(dān)的原因之一。所述長短信是指其容量超出一條短信的最大信息容量、必須采用至少兩條短信發(fā)送的短信。相對于長短信來說,一次可發(fā)送全部內(nèi)容的短信稱為非長短信。
現(xiàn)有技術(shù)短信一般采用PDU(Protocol Data Unit,協(xié)議數(shù)據(jù)單元)模式的7位、8位或UCS2編碼方式進行編碼。這里,在一條短信內(nèi)僅能采用一種編碼方式。其中,7位編碼用于發(fā)送普通的ASCII字符,它將一串7位的字符(最高位為0)編碼成8位的數(shù)據(jù),每8個字符可“壓縮”成7個;8位編碼通常用于發(fā)送數(shù)據(jù)消息,比如圖片和鈴聲等;而UCS2編碼用于發(fā)送Unicode字符。
按照現(xiàn)有短信協(xié)議,PDU串的用戶信息(TP-UD,TP-User-Data)段最大容量是140字節(jié),所以在這三種編碼方式下,可以發(fā)送的一條非長短信的最大字符數(shù)分別是160、140和70。不管用戶發(fā)送什么樣的內(nèi)容、字符類型為何的短消息,如果超過最大字符數(shù)量,長短信內(nèi)容將會被分割成多條去發(fā)送。這里,將一個英文字母、一個漢字和一個數(shù)據(jù)字節(jié)都視為一個字符。
在這三種編碼中,UCS2編碼方式所包含的字符范圍最大,可以將所有的字符編碼;7位編碼方式所包含的字符范圍只有不到140個字符,7位字符集包括標(biāo)準(zhǔn)7位字符集和擴展7位字符集。擴展7位字符需要在其前面加一個轉(zhuǎn)義字符才能夠參與編碼。轉(zhuǎn)義字符是標(biāo)準(zhǔn)7位字符,只在有擴展7位字符時才會使用;8位編碼方式的范圍只有256個字符。
在PDU模式中,按照現(xiàn)有短信協(xié)議,一條長短信被分割以后,單條子短信所能夠發(fā)送的最大字符數(shù)量分別是1)在7位編碼方式下153個字符;2)在8位編碼方式下134個字符;3)UCS2編碼方式下67個字符。
與前面提到的非長短信三種編碼下最大字符數(shù)量160、140和70相比,長短信被分割后的子短信在每種編碼方式下的最大字符數(shù)量都少了幾個,這是因為這幾個字符要被用于存放長短信的一些標(biāo)識信息。
在7位、8位和UCS2編碼這三種編碼下,每一個字符在存儲器中所占用的空間分別為1)7位的編碼方式下每七位構(gòu)成一個字符;2)8位編碼方式下每八位構(gòu)成一個字符;3)UCS2編碼方式下每十六位構(gòu)成一個字符。
其中,擴展7位字符編碼時有點特殊,一個擴展7位字符在7位編碼方式下需要在擴展字符前面加上一個轉(zhuǎn)義字符,共2個7位字符參與編碼,在存儲器中所占長度需要14位;在8位編碼方式下,如果該擴展7位字符在8位編碼范圍內(nèi),編碼時只需要該字符參與編碼,在存儲器中所占長度為8位;如果該字符不在8位編碼范圍內(nèi),則該字符只能用UCS2編碼,需要占用的存儲長度為16位。因此,在本文中現(xiàn)有技術(shù)短信的編碼優(yōu)先級別從低到高分別是7位、8位和UCS2編碼。最高等級編碼是UCS2編碼,除了在上述字符不在8位編碼范圍內(nèi)的情況,8位編碼等級高于7位編碼等級。
所以在這三種編碼下,一條長短信所包含的字符數(shù)在存儲器中所占長度為分別為1)7位編碼方式下153×7=1071位;
2)8位編碼方式下134×8=1072位;3)UCS2編碼方式下67×16=1072位。
因此,長短信在存儲器的最大長度為1072位。而在這三種編碼方式下,一條非長短信在存儲器中所占長度最大值都是1120(160×7、或140×8、或70×16)位。如果一條短信所包含信息內(nèi)容的位數(shù)大于1120位,則可以判斷該短信為長短信。
根據(jù)現(xiàn)有短信協(xié)議,一條非長短信中僅采用一種編碼方式,當(dāng)一條非長短信中包含超過一種編碼所能處理的字符時,比如7位編碼和UCS2編碼共存在一條短信中時,采用包含字符范圍最大的編碼方式-UCS2進行編碼,以使得對所有短信內(nèi)容編碼。此時,16位長度的UCS2編碼所造成的存儲浪費不能避免。也即對本來可以用7/8位編碼的字符統(tǒng)一為16位Unicode編碼字符,在最極端情況下會增加一倍的存儲容量,增加了短信分割條數(shù)。加重用戶費用負(fù)擔(dān)的同時還加重通信網(wǎng)絡(luò)的負(fù)擔(dān)。
例如短信的內(nèi)容有160個字符,前150個為7位字符,后10個為Unicode字符,如果簡單地統(tǒng)一采用UCS2編碼方式,每個字符分配16位存儲容量,則存儲容量是160×16=2560。對于長短信來說,每個子短信的最大容量是1072,所以這160個字符必須分成3條子短信(67+67+26)發(fā)送。
顯然,在這樣的多種字符混雜的情況下,長短信簡單地統(tǒng)一采用UCS2編碼方式可能大大地降低單條短信(分割后)空間利用率。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種減少長短信分割條數(shù)的短信處理方法。
本發(fā)明要解決的技術(shù)問題是還提供一種減少長短信分割條數(shù)的短信處理裝置。
為解決上述第一技術(shù)問題,本發(fā)明的目的是通過以下技術(shù)方案實現(xiàn)的提供一種短信處理方法,在短信發(fā)送前,包括步驟分析短信內(nèi)字符的類型;在一次短信可以發(fā)送的最大長度內(nèi),選擇能夠?qū)⒃撻L度內(nèi)所有類型字符進行編碼的一種等級較最高等級編碼方式低的編碼方式;采用所述選擇的編碼方式對該長度內(nèi)字符進行編碼,以組建一條短信。
所述分析短信內(nèi)字符的類型包括步驟從需發(fā)送的短信中逐個讀取字符;判斷當(dāng)前字符所屬類型和編碼方式;所述判斷編碼方式的步驟包括比較所述當(dāng)前字符編碼方式與剛好能對已讀全部字符編碼的編碼方式,在當(dāng)前字符編碼方式等級較高情況下,保存當(dāng)前字符編碼方式;返回讀取字符的步驟,直至已讀取字符的存儲長度達(dá)到所述最大長度;選擇一種等級大于或等于保存的編碼方式、并且低于最高等級編碼的編碼方式。
定所述最大長度的步驟為判斷短信類型,是長短信則所述最大長度為小于或等于1072位,否則所述最大長度為1120位。
在讀取一個字符后記錄本次所讀取的字符偏移量;所述判斷短信類型的步驟包括依據(jù)保存的編碼方式統(tǒng)計當(dāng)前需要參與編碼的字符數(shù)量;依據(jù)保存的編碼方式與當(dāng)前所統(tǒng)計的參與編碼的字符總數(shù),計算所述字符總共需要占用的存儲長度;判斷占用的存儲長度是否小于或等于1120位,是并且已經(jīng)讀完全部字符則判斷短信類型為非長短信,否則判斷短信類型為長短信。
所述判斷占用的存儲長度小于或等于1072位、并且還剩未讀取字符時進一步包括單獨保存所讀取的字符偏移量與編碼方式的步驟,所述編碼方式用于在確定短信類型為非長短信時對字符進行編碼。
在所述占據(jù)的存儲長度大于1072位、并且判斷短信類型為長短信時進一步包括,返回記錄本次所讀取的字符偏移量與編碼方式的步驟,所述字符偏移量作為長短信截取點,所述編碼方式用于對字符進行編碼。
在分析短信內(nèi)字符的類型之前進一步包括,初始化短信類型為非長短信的步驟;在判斷短信類型為長短信時繼續(xù)進行讀取字符;在再次讀取到長短信一次發(fā)送的最大長度時截取該長度內(nèi)的字符。
在判斷該字符所屬類型為只能用UCS2編碼的類型時,判斷整個短信的長度,如果整個短信長度大于70個字符,則判斷該短信的短信類型是長短信,此時判斷字符偏移量是否大于67個字符,是則將此字符前面的67個字符截取并編碼。
所述編碼方式是能夠?qū)⒃撻L度內(nèi)所有類型字符進行編碼的最低等級編碼方式。
為解決上述第二技術(shù)問題,本發(fā)明的目的是通過以下技術(shù)方案實現(xiàn)的提供一種短信處理裝置,包括字符類型分析模塊、編碼方式判斷模塊以及編碼模塊,所述字符類型分析模塊用于在短信發(fā)送前分析短信內(nèi)字符的類型,所述編碼方式判斷模塊用于在一次短信可以發(fā)送的最大長度內(nèi),選擇能夠?qū)⒃撻L度內(nèi)所有類型字符進行編碼的一種等級較最高等級編碼方式低的編碼方式,所述編碼模塊用于采用所述選擇的編碼方式對該長度內(nèi)字符進行編碼,以組建一條短信。
所述字符類型分析模塊包括字符讀取模塊和字符類型與編碼判斷模塊,所述編碼方式判斷模塊包括編碼方式比較模塊和編碼方式保存模塊,所述字符讀取模塊用于從需發(fā)送的短信中逐個讀取字符,所述字符類型與編碼判斷模塊用于判斷該字符所屬類型和當(dāng)前編碼方式,所述編碼方式比較模塊用于比較所述當(dāng)前字符編碼方式與剛好能對已讀全部字符編碼的編碼方式,在當(dāng)前字符編碼方式等級較高情況下,保存當(dāng)前字符編碼方式,并由字符讀取模塊繼續(xù)讀取字符,直至已讀取字符的存儲長度達(dá)到所述最大長度。
進一步包括短信類型判斷模塊,其包括字符數(shù)量統(tǒng)計模塊、存儲長度計算模塊以及存儲長度判斷模塊,所述字符數(shù)量統(tǒng)計模塊用于依據(jù)保存的編碼方式統(tǒng)計當(dāng)前需要參與編碼的字符數(shù)量,所述存儲長度計算模塊用于依據(jù)所述保存的編碼方式與當(dāng)前所統(tǒng)計的參與編碼的字符總數(shù),計算該等字符總共需要占用的存儲長度,所述存儲長度判斷模塊用于判斷占用的存儲長度是否小于或等于1120位,是并且已經(jīng)讀完全部字符則判斷短信類型為非長短信,否則判斷短信類型為長短信。
所述短信類型判斷模塊進一步包括字符偏移量與編碼方式單獨保存模塊304,其用于在判斷占用的存儲長度小于或等于1072位、并且還剩未讀取字符時單獨保存所讀取的字符偏移量與編碼方式,所述編碼方式用于在確定短信類型為非長短信時對字符進行編碼。
進一步包括長短信截取模塊,在所述占據(jù)的存儲長度大于1072位、并且判斷短信類型為長短信時,所述長短信截取模塊用于根據(jù)記錄的本次所讀取的字符偏移量與編碼方式、分別設(shè)定所述長短信截取點對字符進行編碼。
在字符類型分析模塊判斷該字符所屬類型為UCS2編碼時,由字符偏移量記錄模塊記錄整個短信的長度,在整個短信長度大于70字符情況下,所述短信類型判斷模塊判斷得到該短信的短信類型是長短信,并在字符偏移量記錄模塊記錄的字符偏移量大于67字符情況下,由長短信截取模塊將此字符前面的67個字符截取,并由編碼模塊進行編碼。
以上第一技術(shù)方案可以看出,由于本發(fā)明在多種類型字符混合的長短信需要發(fā)送前,對每條分割的短信采用較優(yōu)編碼方式進行編碼,避免統(tǒng)一用一種編碼方式對整條短信編碼。也就是動態(tài)地分析每一個字符所屬的字符類型來決定一條能夠獨立發(fā)送的短信所應(yīng)該選取的較優(yōu)編碼方式、動態(tài)統(tǒng)計在較優(yōu)編碼方式下參與編碼的字符數(shù)量最大值,取可以實現(xiàn)獨立發(fā)送短信的字符數(shù)量最多的一種編碼方式來組成一條可獨立發(fā)送的短信,使一條獨立發(fā)送的短信能夠發(fā)送最大數(shù)量的信息內(nèi)容。對所述長短信重復(fù)使用上述方法,則對整個短信內(nèi)容而言可能就會采用多種編碼方式與分割方式,避免簡單地對整條短信使用單一的編碼方式而導(dǎo)致長短信分割后發(fā)送次數(shù)多、發(fā)送的短信空間利用率低、用戶費用增加的情況,從而減少長短信的分割條數(shù)、提高空間利用率、減輕用戶費用負(fù)擔(dān)以及降低系統(tǒng)負(fù)擔(dān)。
以上第二技術(shù)方案可以看出,由于本發(fā)明在多種類型字符混合的長短信需要發(fā)送前,采用編碼方式判斷模塊和短信類型判斷模塊判斷出能對單條分割的子短信字符全部編碼的較優(yōu)編碼方式,避免統(tǒng)一用一種編碼方式對整條短信編碼。也就是采用字符類型分析模塊動態(tài)地分析每一個字符所屬的字符類型,并配合編碼方式判斷模塊來決定一條能夠獨立發(fā)送的短信所應(yīng)該選取的較優(yōu)編碼方式、動態(tài)統(tǒng)計在較優(yōu)編碼方式下參與編碼的字符數(shù)量最大值,取可以實現(xiàn)獨立發(fā)送短信的字符數(shù)量最多的一種編碼方式來組成一條可獨立發(fā)送的短信,使一條獨立發(fā)送的短信能夠發(fā)送最大數(shù)量的信息內(nèi)容。避免簡單地對整條短信使用單一的編碼方式而導(dǎo)致長短信分割后發(fā)送次數(shù)多、發(fā)送的短信空間利用率低、用戶費用增加的情況,從而減少長短信的分割條數(shù)、提高空間利用率、降低用戶費用負(fù)擔(dān)以及降低系統(tǒng)負(fù)擔(dān)。
圖1是本發(fā)明短信處理方法第一實施方式的流程圖;圖2是判斷字符類型與編碼方式的流程圖;圖3是統(tǒng)計參與編碼的字符數(shù)量的流程圖;圖4是本發(fā)明短信處理方法第二實施方式的流程圖;圖5是本發(fā)明短信處理裝置的原理框圖。
具體實施例方式
本發(fā)明基本原理是在多種類型字符混合的長短信需要發(fā)送前,為避免簡單的對整條短信使用單一的編碼方式而致使發(fā)送的短信空間利用率低、用戶費用增加的情況。本發(fā)明提出一種在遵守現(xiàn)有協(xié)議的基礎(chǔ)上,對長短信內(nèi)容進行短信分割,動態(tài)地分析每一個字符所屬的字符類型來決定一條能夠獨立發(fā)送的短信所應(yīng)該選取的較優(yōu)編碼方式、動態(tài)統(tǒng)計在較優(yōu)編碼方式下參與編碼的字符數(shù)量最大值,取可以實現(xiàn)獨立發(fā)送短信的字符數(shù)量最多的一種編碼方式來組成一條可獨立發(fā)送的短信,使一條獨立發(fā)送的短信能夠發(fā)送最大數(shù)量的信息內(nèi)容。對所述長短信重復(fù)使用上述方法,則對整個短信內(nèi)容而言可能就會采用多種編碼方式與分割方式,從而減少長短信的分割條數(shù)、提高空間利用率、減少信息費用。
基于以上原理,本發(fā)明提供多個實施方式以實現(xiàn)發(fā)明目的,分別舉未知短信類型、已知長短信和長短信下快速處理短信內(nèi)容的實施方式以充分說明本發(fā)明。以下結(jié)合實施方式和附圖,對本發(fā)明進行詳細(xì)描述。
參閱圖1,以下是對編輯完成的短信進行分割的流程,以便在分割完成之后進行發(fā)送。本發(fā)明第一實施方式是在未知該已編輯完成的短信是否為長短信類型情況進行短信分割的處理A、初始化需發(fā)送短信的編碼方式為最低等級,也就是7位編碼方式,初始化短信類型為非長短信,擴展7位字符為0。
初始化的作用在于無論短信內(nèi)容為何,預(yù)先設(shè)定其編碼方式為最低等級并且短信類型為非長短信,如果分割結(jié)果是全部短信內(nèi)容屬于最低等級編碼,即不需要采用較高級編碼方式,從而節(jié)省存儲空間,減少分割條數(shù)。如果最后判斷的結(jié)果是長短信,那么可能進行多次分割,每次分割的流程步驟A都需要初始化需發(fā)送短信的編碼方式為最低等級,但短信類型標(biāo)識僅初始化一次,即如果多次分割,第一次分割的流程需要初始化,其他分割流程不需要初始化。
以下步驟B、C和D是分析短信內(nèi)字符類型的處理流程。
B、從需發(fā)送的短信內(nèi)容中讀取一個字符,判斷是否字符結(jié)束標(biāo)識,是則更改結(jié)束標(biāo)識,直接轉(zhuǎn)到步驟M,否則繼續(xù)以下步驟。
從第一個字符開始分析,如果第一個字符就已經(jīng)是短信結(jié)尾,說明是空短信,在后續(xù)循環(huán)分析中,如果該字符表明已經(jīng)是短信結(jié)尾,則沒有必要再分析,結(jié)束循環(huán)。
C、記錄本次所讀取的字符偏移量。
所述的字符偏移量是指相對于本次分割短信過程的第一次讀取字符的位置來說的,比如第一次讀取字符,那么這個字符偏移量是1,第n次讀取字符,那么這個字符偏移量是n。讀取的間隔是16位,因為在此之前,所有屬于7位、擴展7位、8位或者UCS2編碼類型的字符都轉(zhuǎn)換成了Unicode字符。在后續(xù)的分割短信流程中,所述字符偏移量作為短信分割點的依據(jù)。每分割一次后,字符偏移量都會清零。
D、判斷該字符所屬類型和編碼方式。
即判斷該字符所屬的編碼類型,分析其屬于標(biāo)準(zhǔn)7位、擴展7位、8位或者UCS2編碼字符的哪一種,進而確定7位、8位或者UCS2編碼方式。
以下步驟E~K處理的目的是在一次短信可以發(fā)送的最大長度內(nèi)而且不含只能采用最高等級編碼進行編碼的字符類型情況下,選擇能夠?qū)⒃撻L度內(nèi)所有類型字符進行編碼的一種等級較最高等級編碼方式低的編碼方式;如果有UCS2編碼字符,則按照UCS2編碼方式對含該UCS2編碼字符的獨立短信進行編碼。
E、與此前保存的較高等級編碼方式比較,如果此字符的編碼方式等級更高,則將當(dāng)前編碼方式替換所保存的編碼方式。
此步驟的目的在于因為每個單獨發(fā)送的短信只能采用一種編碼方式,而且是采用能對全部字符進行編碼的編碼方式來進行編碼,因此這里在分析短信字符的同時,將分析到的屬于較高等級的字符的編碼方式記錄下來,這樣就能得到短信里面字符所屬最高等級的編碼方式,因而利于短信內(nèi)容占用存儲量長度計算。
本步驟具體過程請參閱圖2,具體是E1、判斷所述保存的較高等級編碼方式是否等于UCS2,如果是則進入步驟E2,否則進入步驟E3;E2、直接返回UCS2編碼方式;因為UCS2編碼為最高級別編碼,可以對任意字符編碼,并且必須采用UCS2編碼方式進行編碼,所以沒有必要再分析讀取的字符類型與編碼方式,直接返回UCS2編碼類型,分析結(jié)束。
E3、判斷較高等級編碼方式是否為8位編碼方式,是則進入步驟E4,否則進入步驟E6;8位編碼優(yōu)先級是高于7位編碼的編碼方式,此處對保存的較高等級編碼方式是否為8位編碼進行判斷,是進行后續(xù)與本字符的編碼方式進行比較的前提。
E4、判斷本字符的國際字符碼值是否小于等于255,是則進入步驟E5,否則進入步驟E2;在保存的較高等級編碼方式是否為8位編碼方式和本字符的國際字符碼值是否小于等于255情況下,說明本字符的編碼方式等級不可能高于8位編碼方式等級,因此進入步驟E5,返回8位編碼方式,不需要替換已保存的較高等級編碼方式;如果大于255,則說明本字符不能用8位編碼方式進行編碼,只能用UCS2編碼方式進行編碼,因此進入步驟E2。
E5、返回8位編碼方式,分析結(jié)束;E6、判斷本字符是否為標(biāo)準(zhǔn)7位編碼字符,是則進入步驟E7,否則進入步驟E8;
在較高等級編碼不屬于UCS2和8位編碼情況下,本字符可能是8位、標(biāo)準(zhǔn)7位或擴展7位編碼字符,因此在標(biāo)準(zhǔn)7位編碼字符集中查找本字符,如果找到了本字符,進入步驟E7。
E7、返回7位編碼方式,分析結(jié)束;本步驟說明保存的較高等級編碼和本字符編碼方式一致,因此返回7位編碼方式,不需要替換保存的較高等級編碼。
E8、判斷本字符是否為擴展7位編碼字符,是則進入步驟E9,否則進入步驟E10;在本字符可能是擴展7位編碼情況下,在擴展7位編碼字符集中查找本字符,如果找到了本字符,進入步驟E9。
E9、記錄該擴展7位編碼類型,分析結(jié)束;本步驟目的并不在于替換保存的較高等級編碼,目的在于在后續(xù)統(tǒng)計參與編碼的字符時,作為是否將參與編碼字符數(shù)量增1的依據(jù)。
E10、判斷本字符的所屬的國際碼字符碼值是否小于等于255,如果本字符的國際字符碼值大于255,進入步驟E2,否則進入步驟E11;因為在此步驟中,本字符可能是屬于UCS2編碼,因此判斷其國際碼字符碼值是否大于255,是則進入步驟E2,返回UCS2編碼方式,否則進入步驟E11。
E11、判斷本次分割前分析的所有字符中是否有碼值大于255的字符,是則進入步驟E2,否則進入步驟E5。
在確定本字符編碼不屬于UCS2編碼下,分析本次分割前分析的所有字符中是否有碼值大于255的字符,如果有,則應(yīng)該將已保存較高等級編碼方式替換為UCS2編碼,否則返回8位編碼方式,最終完成與此前保存的較高等級編碼方式比較的流程。
F、依據(jù)較高等級編碼方式統(tǒng)計當(dāng)前需要參與編碼的字符數(shù)量。
此步驟的目的在于在每次分析字符的循環(huán)中,統(tǒng)計出按照當(dāng)前較高等級編碼方式對應(yīng)的已讀的參與編碼的字符數(shù)量,以便于用作后續(xù)判斷是否長短信的參數(shù)。所述的參與編碼的字符數(shù)量可能與上述本次所讀取的字符偏移量不同,比如對一個擴展7位編碼字符來說,其讀取時字符偏移量是增1,而此時參與編碼的字符數(shù)量就增2,因為字符偏移量的計算是16位步進的,而參與編碼的字符數(shù)量是按編碼來計算。擴展7位編碼字符是增加一個7位編碼字符后組成的存儲長度為14位的字符,如果最后記錄的較高等級編碼方式是7位編碼,則參與編碼的字符數(shù)多余已記錄的字符偏移量。
本步驟具體流程請參閱圖3,包括F1、判斷7位編碼是否為保存的較高等級編碼方式,如果不是則進入步驟F2,否則進入步驟F3;判斷7位編碼是否為保存的較高等級編碼方式,目的在于得知保存的較高等級編碼方式是否為8位編碼或UCS2編碼,如果是則因為參與編碼的字符與偏移量一致,因此不需要后續(xù)的參與編碼的字符量的計算;否則需要計算參與編碼的字符量。
F2、返回本次分割前分析的字符總數(shù);不要后續(xù)的參與編碼的字符量的計算,返回本次分割前分析的字符總數(shù)。
F3、取當(dāng)前字符類型;從上述步驟E取得當(dāng)前字符類型,以作為后續(xù)計算的參數(shù)。
F4、判斷是否擴展7位編碼字符,是則進入步驟F5,否則進入步驟F6;F5、本次分析的擴展7位編碼字符總數(shù)加1;由于擴展7位編碼字符是增加一個7位編碼字符后組成的存儲長度為14位的字符,因此需參與編碼字符量需要增1,因為在8位或UCS2編碼時存儲長度為14位的擴展7位編碼字符其字符量算作1個,在7位編碼方式下則必須算作2個。
F6、返回本次分析的字符總數(shù)與擴展7位編碼字符總數(shù)之和。
將統(tǒng)計的非擴展7位編碼的字符量,加上經(jīng)過上述計算的擴展7位編碼字符總數(shù),即可得到當(dāng)前需要參與編碼的字符數(shù)量。
G、使用最優(yōu)的編碼方式,與當(dāng)前所統(tǒng)計的參與編碼的字符總數(shù),來計算這些字符數(shù)總共需要占用的存儲長度。
本步驟是利用上述較高等級編碼方式和已記錄的本次讀取字符偏移量,算出在所述較高等級編碼方式下這些已記錄字符數(shù)量占據(jù)的存儲長度。比如本次循環(huán)分析到第70個字符,發(fā)現(xiàn)該字符是UCS2編碼字符,則70個字符都必須采用UCS2編碼方式進行編碼,那上述字符占用的存儲長度可以這樣計算存儲長度=本次參與編碼字符數(shù)量×當(dāng)前編碼方式對應(yīng)的字符長度=70×16=1120位。
H、判斷占用的存儲長度是否大于1072位,小于或等于則進入步驟I,否則進入步驟J;此步驟是預(yù)先為短信分割記下可能的分割點。因為一條長短信的子短信其占用的存儲長度最大為1072位,因此如果是長短信則需要在需要分割的位置設(shè)定一個分割標(biāo)志。至于進行“小于或等于”的判斷,是有可能分析到此處時占用的存儲長度剛好是1072位,也可能比1072位小一點的位置。如果有一個字符跨越了“1072位”這個位置,這時當(dāng)然不能把該字符和前面的字符一起作為一條短信發(fā)送,只能把分割點設(shè)定在前一個字符上。之所以是可能的分割點,是因為如果是非長短信,那么其存儲長度最大為1120位,如果分析完已編輯短信的全部字符其占存儲長度還沒有超過1120位,則沒有必要分割短信,因為該已編輯短信可以作為一條非長短信發(fā)送。
I、保存本次字符偏移量和編碼方式,返回步驟B。
保存本次字符偏移量和編碼方式的目的在于為完成此次分割短信做準(zhǔn)備,這些字符和編碼方式用于組建最終發(fā)送的短信。雖然前面步驟C和E已經(jīng)進行過保存字符偏移量和編碼方式的動作,但如果該已編輯短信是長短信,并且已讀取字符所占的存儲長度超過1072位、未超過1120位前,步驟C和E保存的字符偏移量會被修改,而編碼方式也可能被修改,這樣后續(xù)確定需分割短信時,會造成組建該子短信需要的字符偏移量和編碼方式數(shù)據(jù)錯誤,造成分割失敗,因此需要對分割點的字符偏移量和編碼方式單獨保存。
J、判斷短信類型標(biāo)識是否為長短信,是長短信則進入步驟M,否則進入步驟K。
此步驟是當(dāng)判斷占用的存儲長度大于1072位時啟動,此時進行短信類型標(biāo)識是否為長短信的判斷,目的在于將此短信發(fā)送標(biāo)記為長短信發(fā)送,使得網(wǎng)絡(luò)或?qū)Ψ街婪指詈蟮淖佣绦攀菍儆谝粭l長短信的。如果短信被分割,其類型標(biāo)識會由第一次分割前的非長短信改為長短信。長短信分割后的子短信只能發(fā)送1072位存儲容量,因此讀取的字符所占存儲長度單元大于1072位即可進行分割操作。如果不是長短信,則在存儲長度小于或等于1120位時繼續(xù)分析字符,直至最終判定是非長短信。
K、判斷占用的存儲長度是否小于或等于1120位,是則單獨保存所讀取的字符偏移量與編碼方式,返回步驟B,否則進入步驟L;此步驟目的在存儲長度小于或等于1120位、繼續(xù)分析字符時判斷此已編輯短信是否存在非長短信的可能。如果此時占用的存儲長度大于1120位,則已經(jīng)確認(rèn)是長短信。如果小于或等于1120位,并且已經(jīng)讀完全部字符則判斷已編輯短信非長短信,并且單獨保存所讀取的字符偏移量與編碼方式,以用于對短信進行編碼。
以上的步驟F~K可以判斷短信類型,以確定所述的獨立短信所能發(fā)送的最大長度。
以下步驟L和M是采用所述選擇的編碼方式對該長度內(nèi)字符進行編碼,以組建一條能獨立發(fā)送的短信。
L、認(rèn)為已編輯短信需要分割,將非長短信類型標(biāo)識更改為長短信。
此時記錄本次所讀取的字符偏移量與編碼方式,所述字符偏移量作為長短信截取點,所述編碼方式用于對字符進行編碼。
M、保存所能夠構(gòu)成一條短信的字符串、編碼方式以及字符串長度(偏移量)等信息。
此步驟是短信一次分割完成,因此組建一條不超過標(biāo)準(zhǔn)長度的短信。如果還有字符沒有分析完,繼續(xù)以下步驟。
N、判斷是否結(jié)束標(biāo)識,是則進入步驟O;否則返回步驟A。
此時分析是否到了已編輯短信的末端,即是否分析到了結(jié)束標(biāo)識,是則應(yīng)該結(jié)束短信分割流程,否則返回步驟A繼續(xù)下一條子短信的分割操作。下一條短信分割流程的讀取字符步驟是從上次分割過程中C步驟記錄的字符偏移量所指向的后一個字符開始,在再次讀取到長短信一次發(fā)送的最大長度時再次截取該長度內(nèi)的字符。
O、短信分割結(jié)束。
這里可以舉一個例子對本發(fā)明短信處理方法進行說明,例如短信的內(nèi)容有160個字符,前153個為7位字符,后7個為Unicode字符,如果簡單地統(tǒng)一采用UCS2編碼方式,每個字符分配16位存儲容量,則存儲容量是160×16=2560。對于長短信來說,每個子短信的最大容量是1072,所以這160個字符必須分成3條子短信(67+67+26)發(fā)送。
依照本發(fā)明,則不是統(tǒng)一采用UCS2編碼方式對短信全部內(nèi)容進行編碼,而是首先得知該短信的短信類型為長短信;然后對短信進行分割,第一次分割點在整條短信的第1071存儲位,即第153個字符。此153個字符用7位編碼方式進行編碼,并作為所述長短信的第一條子短信進行發(fā)送。還剩后面的7個字符用UCS2編碼方式進行編碼,作為所述長短信的第二條子短信進行發(fā)送,這樣就可以節(jié)省一條短信的發(fā)送量。
從以上可以看出,在多種類型字符混合的長短信需要發(fā)送前,本發(fā)明采用對長短信內(nèi)容進行分割的方式,對每條分割的短信采用較優(yōu)編碼方式進行編碼,避免統(tǒng)一用一種編碼方式對整條短信編碼。也就是動態(tài)地分析每一個字符所屬的字符類型來決定一條能夠獨立發(fā)送的短信所應(yīng)該選取的較優(yōu)編碼方式、動態(tài)統(tǒng)計在較優(yōu)編碼方式下參與編碼的字符數(shù)量最大值,取可以實現(xiàn)獨立發(fā)送短信的字符數(shù)量最多的一種編碼方式來組成一條可獨立發(fā)送的短信,使一條獨立發(fā)送的短信能夠發(fā)送最大數(shù)量的信息內(nèi)容。對所述長短信重復(fù)使用上述方法,則對整個短信內(nèi)容而言可能就會采用多種編碼方式與分割方式,避免簡單地對整條短信使用單一的編碼方式而導(dǎo)致長短信分割后發(fā)送次數(shù)多、發(fā)送的短信空間利用率低、用戶費用增加的情況,從而減少長短信的分割條數(shù)和提高空間利用率。
如前所述,2006年1至4月中國手機短信量達(dá)到1322.5億條,如果其中有1%的長短信,那么就有13.225億條,假設(shè)每條長短信發(fā)送都節(jié)省一次發(fā)送量,那么就減少13.225億次,每條短信0.1元計,可減少信息費用1.3225億元,大大減輕了用戶費用負(fù)擔(dān),同時由于網(wǎng)絡(luò)系統(tǒng)減少13.225億次信息傳送操作,較大程度降低系統(tǒng)負(fù)擔(dān)。
參閱圖4,本發(fā)明短信處理方法還提供第二實施方式,該實施方式是在已知該已編輯完成的短信是長短信類型情況下進行短信分割的處理,本實施方式類似于本發(fā)明第一實施方式,基本包括步驟A、初始化需發(fā)送短信的編碼方式為最低等級,也就是7位編碼方式,初始化短信類型為非長短信,擴展7位字符為0。
初始化的作用在于無論短信內(nèi)容為何,預(yù)先設(shè)定其編碼方式為最低等級并且短信類型為非長短信,如果分割結(jié)果是全部短信內(nèi)容屬于最低等級編碼,即不需要采用較高級編碼方式,從而節(jié)省存儲器空間,減少分割條數(shù)。如果最后判斷的結(jié)果是長短信,那么可能進行多次分割,每次分割的流程步驟A都需要初始化需發(fā)送短信的編碼方式為最低等級,但短信類型標(biāo)識僅初始化一次,即如果多次分割,第一次分割的流程需要初始化,其他分割流程不需要初始化。
B、從需發(fā)送的短信內(nèi)容中讀取一個字符,判斷是否字符結(jié)束標(biāo)識,是則更改結(jié)束標(biāo)識,直接轉(zhuǎn)到步驟M,否則繼續(xù)以下步驟。
從第一個字符開始分析,如果第一個字符就已經(jīng)是短信結(jié)尾,說明是空短信,在后續(xù)循環(huán)分析中,如果該字符表明已經(jīng)是短信結(jié)尾,則沒有必要再分析,結(jié)束循環(huán)。
C、記錄本次所讀取的字符偏移量。
所述的字符偏移量是指相對于第一次讀取字符的位置來說的,比如第一次讀取字符,那么這個字符偏移量是1,第n次讀取字符,那么這個字符偏移量是n。讀取的間隔是16位,因為在此之前,所有屬于7位、擴展7位、8位或者UCS2編碼類型的字符都轉(zhuǎn)換成了Unicode字符。在后續(xù)的分割短信流程中,所述字符偏移量作為短信分割點的依據(jù)。
D、判斷該字符所屬類型和編碼方式。
即判斷該字符所屬的編碼類型,分析其屬于標(biāo)準(zhǔn)7位、擴展7位、8位或者UCS2編碼字符的哪一種,進而確定7位、8位或者UCS2編碼方式。
E、與此前保存的較高等級編碼方式比較,如果此字符的編碼方式等級更高,則將當(dāng)前編碼方式替換所保存的編碼方式。
此步驟的目的在于因為每個單獨發(fā)送的短信只能采用一種編碼方式,而且是采用能對所有字符進行編碼的編碼方式來進行編碼,因此這里在分析短信字符的同時,將分析到的屬于較高等級的字符的編碼方式記錄下來,這樣就能得到短信里面字符所屬較高等級的編碼方式,因而利于后續(xù)的短信占用存儲量長度計算。
F、依據(jù)較高等級編碼方式統(tǒng)計當(dāng)前需要參與編碼的字符數(shù)量。
此步驟的目的在于在每次分析字符的循環(huán)中,統(tǒng)計出按照當(dāng)前較高等級編碼方式對應(yīng)的已讀的參與編碼的字符數(shù)量,以便于用作后續(xù)判斷是否長短信的參數(shù)。
G、使用最優(yōu)的編碼方式,與當(dāng)前所統(tǒng)計的參與編碼的字符總數(shù),來計算這些字符數(shù)總共需要占用的存儲長度。
本步驟是利用上述較高等級編碼方式和已記錄的本次讀取字符偏移量,算出在所述較高等級編碼方式下這些已記錄字符數(shù)量占據(jù)的存儲長度。比如本次循環(huán)分析到第70個字符,發(fā)現(xiàn)該字符是UCS2編碼字符,則70個字符都必須采用UCS2編碼方式進行編碼,那上述字符占用的存儲長度可以這樣計算存儲長度=本次讀取字符偏移量×當(dāng)前編碼方式對應(yīng)的字符長度=70×16=1120位。
H、判斷占用的存儲長度是否大于1072位,小于或等于則進入步驟I,否則進入步驟M;此步驟是預(yù)先為短信分割記下分割點。因為一條長短信的子短信其占用的存儲長度最大為1072位,因此需要在需要分割的位置設(shè)定一個分割標(biāo)志。至于進行“小于或等于”的判斷,是有可能分析到此處時占用的存儲長度剛好是1072位,也可能比1072位小一點的位置,即有一個字符跨越了“1072位”這個位置。這時當(dāng)然不能把該字符和前面的字符一起作為一條短信發(fā)送,只能把分割點設(shè)定在前一個字符上。
I、保存本次字符偏移量和編碼方式,返回步驟B。
保存本次字符偏移量和編碼方式的目的在于為完成此次分割短信做準(zhǔn)備,這些字符偏移量和編碼方式用于組建最終發(fā)送的短信。雖然前面步驟C和E已經(jīng)進行過保存字符偏移量和編碼方式的動作,但如果該已編輯短信是長短信,并且已讀取字符所占的存儲長度超過1072位,步驟C和E保存的字符偏移量會被修改,而編碼方式也可能被修改,這樣后續(xù)確定需分割短信時,會造成組建該子短信需要的字符偏移量和編碼方式數(shù)據(jù)錯誤,造成分割失敗,因此需要對分割點的字符偏移量和編碼方式單獨保存。
此處省略第一實施方式中的J,K,L步驟,因為不需要進行是否長短信的判斷。
M、保存所能夠構(gòu)成一條短信的字符串、編碼方式以及字符串長度(偏移量)等信息。
此步驟是短信一次分割完成,因此組建一條不超過標(biāo)準(zhǔn)長度的短信。如果還有字符沒有分析完,繼續(xù)以下步驟。
N、判斷是否結(jié)束標(biāo)識,是則進入步驟O;否則返回步驟A。
此時分析是否到了已編輯短信的末端,即是否分析到了結(jié)束標(biāo)識,是則應(yīng)該結(jié)束短信分割流程,否則返回步驟A繼續(xù)下一條子短信的分割操作。下一條短信分割流程的讀取字符步驟是從上次分割過程中C步驟記錄的字符偏移量所指向的后一個字符開始。
O、短信分割結(jié)束。
從以上可以看出,由于不需要對是否長短信進行判斷,因此較本發(fā)明第一實施方式減少步驟。但同樣可以實現(xiàn)減少長短信的分割條數(shù)、提高空間利用率、降低用戶費用和降低系統(tǒng)負(fù)擔(dān)的目的。
本發(fā)明第三實施方式是在判斷整個短信內(nèi)容當(dāng)中有只能使用UCS2編碼的字符,可以在本發(fā)明第一實施方式或第二實施方式中嵌入以下方法,加快分析的速度,分析步驟如下F’、在上述本發(fā)明第一實施方式或第二實施方式的步驟D中,一旦判斷出只能使用UCS2編碼的字符,直接判斷整個短信的長度,類似于上述步驟F,但統(tǒng)計的是整個短信長度。
K’、如果整個短信長度小于等于70,將所有的字符保存,編碼方式為UCS2,保存分析信息以組建一條短信。
L’、如果整個短信長度大于70,則可以肯定整個短信內(nèi)容是需要分割成多條子短信的,執(zhí)行第一實施方式的步驟L,將短信類型標(biāo)識更改為長短信狀態(tài)。
C’、根據(jù)上述步驟C,判斷字符偏移量是否大于67。
I’、如果字符數(shù)小于等于67個,那么直接從起始位置開始往后截取67個字符,編碼方式為UCS2,保存分析信息以組建一條短信。
J’、如果大于67,將此字符前面的所有字符截取保存,編碼方式采用此字符前面分析出的較高等級編碼方式,保存分析信息以組建一條短信。并且還從此字符開始往后截取67個字符,不足67個字符時,截取所有剩余的字符,編碼方式為UCS2,保存分析信息以組建一條短信。如果還有剩余字符,采取以上方式繼續(xù)分割。
上述加快方法是在判斷字符類型時,一旦發(fā)現(xiàn)只能使用UCS2編碼的字符,則無需再進行后續(xù)判斷字符類型的步驟,直接用此編碼進行短信處理,實現(xiàn)與上述第一、第二實施方式一樣的發(fā)明效果,同時加快處理流程。
上述流程中的較高等級編碼方式可以不是唯一的,也就是說,如果統(tǒng)計完在最大長度內(nèi)的全部字符后,發(fā)現(xiàn)7位或8位編碼都可以將所述全部字符編碼,按照上述流程應(yīng)該選擇7位編碼對短信字符進行編碼然后發(fā)送,這里可以選擇8位編碼對短信字符進行編碼然后發(fā)送,同樣可以減少長短信的分割條數(shù)。
參閱圖5,本發(fā)明還提供一種短信處理裝置,所述裝置包括字符類型分析模塊100、編碼方式判斷模塊200、編碼模塊400、短信類型判斷模塊300以及長短信截取模塊500。
所述字符類型分析模塊100用于在短信發(fā)送前分析短信內(nèi)字符的類型,其包括字符讀取模塊101和字符類型與編碼判斷模塊102。所述字符讀取模塊101用于從需發(fā)送的短信中讀取一個字符,所述字符類型與編碼判斷模塊102用于判斷該字符所屬類型和當(dāng)前編碼方式。
所述編碼方式判斷模塊200用于在一次短信可以發(fā)送的最大長度內(nèi)而且不含只能采用最高等級編碼進行編碼的字符類型情況下,選擇能夠?qū)⒃撻L度內(nèi)所有類型字符進行編碼的一種等級較最高等級編碼方式低的編碼方式。所述編碼方式判斷模塊200包括編碼方式比較模塊202和編碼方式保存模塊201。所述編碼方式比較模塊202用于比較所述當(dāng)前編碼方式與此前保存的編碼方式,在該字符的編碼方式等級高于所述保存的編碼方式情況下,在編碼方式保存模塊201內(nèi)將當(dāng)前編碼方式替換所保存的編碼方式,并由字符讀取模塊101繼續(xù)讀取字符,直至已讀取字符的存儲長度達(dá)到所述最大長度。
所述編碼模塊400用于采用所述選擇的編碼方式對該長度內(nèi)字符進行編碼,以組建一條短信。
所述短信類型判斷模塊300包括字符數(shù)量統(tǒng)計模塊301、存儲長度計算模塊302、存儲長度判斷模塊303以及字符偏移量與編碼方式單獨保存模塊304。所述字符數(shù)量統(tǒng)計模塊301用于依據(jù)保存的編碼方式統(tǒng)計當(dāng)前需要參與編碼的字符數(shù)量。所述存儲長度計算模塊302用于依據(jù)所述保存的編碼方式與當(dāng)前所統(tǒng)計的參與編碼的字符總數(shù),計算該等字符總共需要占用的存儲長度。所述存儲長度判斷模塊303用于判斷占用的存儲長度是否小于或等于1120位,是并且已經(jīng)讀完全部字符則判斷短信類型為非長短信,否則判斷短信類型為長短信。所述字符偏移量與編碼方式單獨保存模塊304201用于在判斷占用的存儲長度小于或等于1120位、并且還剩未讀取字符時單獨保存所讀取的字符偏移量與編碼方式,所述編碼方式用于在確定短信類型為非長短信時對字符進行編碼。
所述長短信截取模塊500在所述占據(jù)的存儲長度大于1120位、并且判斷短信類型為長短信時,用于根據(jù)記錄的本次所讀取的字符偏移量與編碼方式、分別設(shè)定所述長短信截取點對字符進行編碼。
本發(fā)明短信處理裝置的基本運作流程是字符類型分析模塊100首先啟動,在發(fā)送前對已編輯的短信進行讀取字符操作。每讀取一個字符都伴隨后面的分析動作直至循環(huán)結(jié)束。
具體是所述字符讀取模塊101從需發(fā)送的短信中讀取一個字符并記錄字符偏移量。所述編碼判斷模塊判斷該字符所屬類型和當(dāng)前編碼方式,由編碼方式比較模塊202比較所述當(dāng)前編碼方式與此前保存的編碼方式,在該字符的編碼方式等級高于所述保存的編碼方式情況下,在編碼方式保存模塊201內(nèi)將當(dāng)前編碼方式替換所保存的編碼方式。所述字符數(shù)量統(tǒng)計模塊301依據(jù)保存的編碼方式統(tǒng)計當(dāng)前需要參與編碼的字符數(shù)量,由存儲長度計算模塊302依據(jù)所述保存的編碼方式與當(dāng)前所統(tǒng)計的參與編碼的字符總數(shù),計算該等字符總共需要占用的存儲長度。然后由存儲長度判斷模塊303判斷占用的存儲長度是否小于或等于1120位,是并且已經(jīng)讀完全部字符則判斷短信類型為非長短信,否則判斷短信類型為長短信。
然后,字符偏移量與編碼方式單獨保存模塊304在判斷占用的存儲長度小于或等于1120位、并且還剩未讀取字符時單獨保存所讀取的字符偏移量與編碼方式,用于在確定短信類型為非長短信時對字符進行編碼。如果存儲長度大于1120位則由長短信截取模塊500根據(jù)記錄的本次所讀取的字符偏移量與編碼方式、分別設(shè)定所述長短信截取點對字符進行編碼。直至分析完整條已編輯的短信。
其中,在字符類型分析模塊100判斷該字符所屬類型為UCS2編碼時,由字符偏移量記錄模塊記錄整個短信的長度,在整個短信長度大于70情況下,所述短信類型判斷模塊300判斷得到該短信的短信類型是長短信,并在字符偏移量記錄模塊記錄的字符偏移量大于67情況下,由長短信截取模塊500將此字符前面的67個字符截取,并由編碼模塊400進行編碼。
從以上可以看出,在多種類型字符混合的長短信需要發(fā)送前,本發(fā)明采用編碼方式判斷模塊和短信類型判斷模塊判斷出能對單條分割的子短信字符全部編碼的較優(yōu)編碼方式,避免統(tǒng)一用一種編碼方式對整條短信編碼。也就是采用字符類型分析模塊動態(tài)地分析每一個字符所屬的字符類型,并配合編碼方式判斷模塊來決定一條能夠獨立發(fā)送的短信所應(yīng)該選取的較優(yōu)編碼方式、動態(tài)統(tǒng)計在較優(yōu)編碼方式下參與編碼的字符數(shù)量最大值,取可以實現(xiàn)獨立發(fā)送短信的字符數(shù)量最多的一種編碼方式來組成一條可獨立發(fā)送的短信,使一條獨立發(fā)送的短信能夠發(fā)送最大數(shù)量的信息內(nèi)容。避免簡單地對整條短信使用單一的編碼方式而導(dǎo)致長短信分割后發(fā)送次數(shù)多、發(fā)送的短信空間利用率低、用戶費用增加的情況,從而減少長短信的分割條數(shù)、提高空間利用率、降低用戶費用負(fù)擔(dān)以及降低系統(tǒng)負(fù)擔(dān)。
以上對本發(fā)明所提供的一種短信處理方法以及裝置進行了詳細(xì)介紹,本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式
及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
權(quán)利要求
1.一種短信處理方法,其特征在于,包括步驟分析短信內(nèi)字符的類型;在一次短信可以發(fā)送的最大長度內(nèi),選擇能夠?qū)⒃撻L度內(nèi)對分析的所有類型的字符進行編碼的一種等級較最高等級編碼方式低的編碼方式;采用所述選擇的編碼方式對該長度內(nèi)字符進行編碼,以組建一條短信。
2.根據(jù)權(quán)利要求1所述的短信處理方法,其特征在于,所述分析短信內(nèi)字符的類型包括步驟從需發(fā)送的短信中逐個讀取字符;判斷當(dāng)前字符所屬類型和編碼方式;所述判斷編碼方式的步驟包括比較所述當(dāng)前字符編碼方式與剛好能對已讀全部字符編碼的編碼方式,在當(dāng)前字符編碼方式等級較高情況下,保存當(dāng)前字符編碼方式;返回讀取字符的步驟,直至已讀取字符的存儲長度達(dá)到所述最大長度;選擇一種等級大于或等于保存的編碼方式、并且低于最高等級編碼的編碼方式。
3.根據(jù)權(quán)利要求2所述的短信處理方法,其特征在于,確定所述最大長度的步驟為判斷短信類型,是長短信則所述最大長度為小于或等于1072位,否則所述最大長度為1120位。
4.根據(jù)權(quán)利要求3所述的短信處理方法,其特征在于,在讀取一個字符后記錄本次所讀取的字符偏移量;所述判斷短信類型的步驟包括依據(jù)保存的編碼方式統(tǒng)計當(dāng)前需要參與編碼的字符數(shù)量;依據(jù)保存的編碼方式與當(dāng)前所統(tǒng)計的參與編碼的字符總數(shù),計算所述字符總共需要占用的存儲長度;判斷占用的存儲長度是否小于或等于1120位,是并且已經(jīng)讀完全部字符則判斷短信類型為非長短信,否則判斷短信類型為長短信。
5.根據(jù)權(quán)利要求4所述的短信處理方法,其特征在于,所述判斷占用的存儲長度小于或等于1072位、并且還剩未讀取字符時進一步包括單獨保存所讀取的字符偏移量與編碼方式的步驟,所述編碼方式用于在確定短信類型為非長短信時對字符進行編碼。
6.根據(jù)權(quán)利要求4所述的短信處理方法,其特征在于,在所述占據(jù)的存儲長度大于1072位、并且判斷短信類型為長短信時進一步包括,返回記錄本次所讀取的字符偏移量與編碼方式的步驟,所述字符偏移量作為長短信截取點,所述編碼方式用于對字符進行編碼。
7.根據(jù)權(quán)利要求4所述的短信處理方法,其特征在于,在分析短信內(nèi)字符的類型之前進一步包括,初始化短信類型為非長短信的步驟;在判斷短信類型為長短信時繼續(xù)進行讀取字符;在再次讀取到長短信一次發(fā)送的最大長度時截取該長度內(nèi)的字符。
8.根據(jù)權(quán)利要求4所述的短信處理方法,其特征在于,在判斷該字符所屬類型為只能用UCS2編碼的類型時,判斷整個短信的長度,如果整個短信長度大于70個字符,則判斷該短信的短信類型是長短信,此時判斷字符偏移量是否大于67個字符,是則將此字符前面的67個字符截取并編碼。
9.根據(jù)權(quán)利要求1所述的短信處理方法,其特征在于,所述編碼方式是能夠?qū)⒃撻L度內(nèi)所有類型字符進行編碼的最低等級編碼方式。
10.一種短信處理裝置,其特征在于,包括字符類型分析模塊、編碼方式判斷模塊以及編碼模塊,所述字符類型分析模塊用于在短信發(fā)送前分析短信內(nèi)字符的類型,所述編碼方式判斷模塊用于在一次短信可以發(fā)送的最大長度內(nèi),選擇能夠?qū)⒃撻L度內(nèi)所有類型字符進行編碼的一種等級較最高等級編碼方式低的編碼方式,所述編碼模塊用于采用所述選擇的編碼方式對該長度內(nèi)字符進行編碼,以組建一條短信。
11.根據(jù)權(quán)利要求10所述的短信處理裝置,其特征在于,所述字符類型分析模塊包括字符讀取模塊和字符類型與編碼判斷模塊,所述編碼方式判斷模塊包括編碼方式比較模塊和編碼方式保存模塊,所述字符讀取模塊用于從需發(fā)送的短信中逐個讀取字符,所述字符類型與編碼判斷模塊用于判斷該字符所屬類型和當(dāng)前編碼方式,所述編碼方式比較模塊用于比較所述當(dāng)前字符編碼方式與剛好能對已讀全部字符編碼的編碼方式,在當(dāng)前字符編碼方式等級較高情況下,保存當(dāng)前字符編碼方式,并由字符讀取模塊繼續(xù)讀取字符,直至已讀取字符的存儲長度達(dá)到所述最大長度。
12.根據(jù)權(quán)利要求11所述的短信處理裝置,其特征在于,進一步包括短信類型判斷模塊,其包括字符數(shù)量統(tǒng)計模塊、存儲長度計算模塊以及存儲長度判斷模塊,所述字符數(shù)量統(tǒng)計模塊用于依據(jù)保存的編碼方式統(tǒng)計當(dāng)前需要參與編碼的字符數(shù)量,所述存儲長度計算模塊用于依據(jù)所述保存的編碼方式與當(dāng)前所統(tǒng)計的參與編碼的字符總數(shù),計算該等字符總共需要占用的存儲長度,所述存儲長度判斷模塊用于判斷占用的存儲長度是否小于或等于1120位,是并且已經(jīng)讀完全部字符則判斷短信類型為非長短信,否則判斷短信類型為長短信。
13.根據(jù)權(quán)利要求12所述的短信處理裝置,其特征在于,所述短信類型判斷模塊進一步包括字符偏移量與編碼方式單獨保存模塊304,其用于在判斷占用的存儲長度小于或等于1072位、并且還剩未讀取字符時單獨保存所讀取的字符偏移量與編碼方式,所述編碼方式用于在確定短信類型為非長短信時對字符進行編碼。
14.根據(jù)權(quán)利要求12所述的短信處理裝置,其特征在于,進一步包括長短信截取模塊,在所述占據(jù)的存儲長度大于1072位、并且判斷短信類型為長短信時,所述長短信截取模塊用于根據(jù)記錄的本次所讀取的字符偏移量與編碼方式、分別設(shè)定所述長短信截取點對字符進行編碼。
15.根據(jù)權(quán)利要求12所述的短信處理裝置,其特征在于,在字符類型分析模塊判斷該字符所屬類型為UCS2編碼時,由字符偏移量記錄模塊記錄整個短信的長度,在整個短信長度大于70字符情況下,所述短信類型判斷模塊判斷得到該短信的短信類型是長短信,并在字符偏移量記錄模塊記錄的字符偏移量大于67字符情況下,由長短信截取模塊將此字符前面的67個字符截取,并由編碼模塊進行編碼。
全文摘要
本發(fā)明公開一種短信處理方法和一種短信處理裝置,在短信發(fā)送前,所述方法包括步驟分析短信內(nèi)字符的類型;在一次短信可以發(fā)送的最大長度內(nèi),選擇能夠?qū)⒃撻L度內(nèi)所有類型字符進行編碼的一種等級較最高等級編碼方式低的編碼方式;采用所述選擇的編碼方式對該長度內(nèi)字符進行編碼,以組建一條短信。本發(fā)明可減少長短信的分割條數(shù)、提高空間利用率、降低用戶費用負(fù)擔(dān)以及降低系統(tǒng)負(fù)擔(dān)。
文檔編號G06F17/00GK101047733SQ20061009144
公開日2007年10月3日 申請日期2006年6月16日 優(yōu)先權(quán)日2006年6月16日
發(fā)明者唐志雄 申請人:華為技術(shù)有限公司