python3:
- 編碼:python3 支援UTF-8, 還搞了個 unicode (這是好東西)
- 通過 unicode進行 字元轉換
#轉換原理
from six import unichr
str1 = "\u3041" # 代表一個字元:即 あ
code = ord(str1) # 擷取該字元的 unicode 值-->一個int 類型的值,可進行加減
print(code, type(ord(str1))) # 12353 <class 'int'> 值和類型
# unicode 值加1: 該字元的下一個字元: あ + 1-->い
print(chr(code + 1)) # ord(str1)+1 :代表該字元的下一個字元的unicode 值
print(chr(code + 1)) # chr() 把unicode轉換成字元
print(unichr(code + 1)) # unichr()與 chr()作用相同:具體差别百度吧
懂了python3的 unicode 轉換,那剩下的就好辦了,
平假名範圍:"\u3041", “\u3096”
片假名範圍: “\u30A1”, "\u30F6"
字元編碼查詢
-
片假名與平假名轉換:
兩種思路:
- 一:
- ord(平)+ x =ord(片),隻要知道中間 內插補點 x ,就可以明白字元 的unicode對應關系
- 例如假設 A , a unicode 插值為:10
-
- //沒寫ord(),應該明白是他們對應的 unicode 值進行加減
- 即: a + 10 =A , A - 10 = a
- 可以推出: b+10=B,c + 10=C
- 二
- 平假名範圍:"\u3041", “\u3096”
- 片假名範圍: “\u30A1”, “\u30F6”
- 知道範圍了,分别周遊呗,便利結果存到字典裡,字典查詢,直接哦耶~
這裡貼出第二種思路(第一種太簡單)
#參數: 平假名起始,結束, 片假名起始,結束
#傳回值: 一個包含兩個字典的數組
def make_dic(Hiragana, endH, Katakana, endK):
dic = {}
start1, end1 = ord(Hiragana), ord(endH)#先轉換成對應 unicode值,用于後續計算
start2, end2 = ord(Katakana), ord(endK)
num = 0 # 用于計數
#實際上 這個key沒啥用,因為 start1, start2,等不是從零開始的
#for key in range(end2-start2): # 85個數
# dic[chr(start1 + key)] = chr(start2 + key)
for key in range(start2, end2): # 85個數
dic[chr(start1 + num)] = chr(start2 + num)
#解釋: 例如 ABCDEFG與 abcdefg
# 字典添加元素: dic[A]=a A 與a 對應
# A +1 與 a + 1 對應 (unicode) --》B 與 b
#來個循環就把 所有元素都對應起來了
num += 1
ldict = dict(zip(dic.values(), dic.keys())) # 字典倒轉
return [dic, ldict] # 傳回一個包含兩個字典的數組
def check_chart(input_str, arr):
for v in input_str:#字元數組裡的單個字元
print(v, end=" : ")
if v in arr[0]:#arr[0]— {平:片} 字典,判斷是否在字典裡,有的話輸出
print(arr[0][v])
elif v in arr[-1]:#arr[-1]— {片:平} 字典,上面字典沒有就在這個字典尋找,
print(arr[-1][v])
input_str = input("輸入:\n")#從控制台輸入 一串 假名,不能有換行
# 平假名範圍,片假名範圍:範圍一樣, 元素對應
arr = make_dic("\u3041", "\u3096", "\u30A1", "\u30F6")
check_chart(base_str, arr)
運作結果:
-
RUBY
之是以講RUBY。。因為它太友善了
Python3 轉位元組 轉其他編碼 不能直接加減 得到其他字元(正則和進制 就算了,不會呀),是以用unicode
ruby可以直接在 字元範圍 間 周遊,不需要格外 轉碼
def show_info
#平假名範圍:"\u3041", "\u3096"
for index in "\u3041".."\u3096" do
printf index
end
puts "\n"
#片假名範圍: "\u30A1", "\u30F6"
for index in "\u30A1".."\u30F6" do
printf index
# print index
end
end
show_info
賊友善,後面搞個字典把它們對應起來,控制台輸入判斷,得出結果,哦了~
ruby有字典反轉的函數:hash.invert 建立一個新的 hash,倒置 hash 中的 keys 和values
後續搞個 循環,不用每次比對完都要重新點選運作
注意:
- ruby 在windows下中文日文 會亂碼(有的是輸出正常,輸入亂碼)
- 測試: 建立一個.rb 檔案: puts gets.chomp #列印輸入的字元
解決方法:
-
檔案頭部 加 utf-8 注釋,檔案頭加 GBK編碼,系統改成 utf8
結果。。随機
(反正我沒成功,轉到 Linux 【預設使用utf-8 編碼,賊舒服】)
用其他語言都差不多,關鍵就是一個字元轉換問題,哎,溜了溜了