import gradio as gr # 摩斯电码映射字典 MORSE_CODE_DICT = { 'A': '._', 'B': '_...', 'C': '_._.', 'D': '_..', 'E': '.', 'F': '.._.', 'G': '__.', 'H': '....', 'I': '..', 'J': '.___', 'K': '_._', 'L': '._..', 'M': '__', 'N': '_.', 'O': '___', 'P': '.__.', 'Q': '__._', 'R': '._.', 'S': '...', 'T': '_', 'U': '.._', 'V': '..._', 'W': '.__', 'X': '_.._', 'Y': '_.__', 'Z': '__..', '1': '.____', '2': '..___', '3': '...__', '4': '...._', '5': '.....', '6': '_....', '7': '__...', '8': '___..', '9': '____.', '0': '_____', ' ': '/', ',': '__..__', '.': '._._._', '?': '..__..', '!': '_._..__', '-': '_...._', '/': '_.._.', '@': '.__._.', '(': '_.__.', ')': '_.__._', '&': '._...', ':': '___...', ';': '_._._.', '=': '_..._', '+': '._._.', '"': '._.._.', '$': '..._.._', "'": '.____.', '%': '._.._.', '<': '._.._.', '>': '._._.', '[': '_.__.', ']': '_.__._', '{': '_.__.', '}': '_.__._', '\\': '_..__' } # 创建摩斯电码到字符的反向映射 MORSE_CODE_REVERSE = {v: k for k, v in MORSE_CODE_DICT.items()} def text_to_binary(text): """将文本转换为二进制""" binary = ' '.join(format(ord(char), '08b') for char in text) return binary def binary_to_text(binary): """将二进制转换为文本""" try: # 删除所有空格 binary = binary.replace(' ', '') # 检查是否只包含0和1 if not all(bit in '01' for bit in binary): return "错误:二进制只能包含0和1" # 确保二进制字符串长度是8的倍数 if len(binary) % 8 != 0: return "错误:二进制长度必须是8的倍数" text = '' for i in range(0, len(binary), 8): byte = binary[i:i+8] text += chr(int(byte, 2)) return text except Exception as e: return f"解码错误: {str(e)}" def text_to_morse(text): """将文本转换为摩斯电码""" morse = [] for char in text.upper(): if char in MORSE_CODE_DICT: morse.append(MORSE_CODE_DICT[char]) else: # 对于不支持的字符,保持原样 morse.append(char) return ' '.join(morse) def morse_to_text(morse): """将摩斯电码转换为文本""" try: morse = morse.strip() # 处理单词间的分隔符 '/' words = morse.split(' / ') result = [] for word in words: chars = word.split(' ') word_result = '' for char in chars: if char in MORSE_CODE_REVERSE: word_result += MORSE_CODE_REVERSE[char] elif char == '': # 跳过空字符 continue else: # 对于不支持的摩斯电码,用问号替代 word_result += '?' result.append(word_result) return ' '.join(result) except Exception as e: return f"解码错误: {str(e)}" def process_encoding(text, method): """根据选择的方法编码文本""" if method == "二进制": return text_to_binary(text) elif method == "摩斯电码": return text_to_morse(text) return "请选择编码方法" def process_decoding(code, method): """根据选择的方法解码文本""" if method == "二进制": return binary_to_text(code) elif method == "摩斯电码": return morse_to_text(code) return "请选择解码方法" # 创建 Gradio 界面 with gr.Blocks(title="文字编码解码工具") as demo: gr.Markdown("# 文字编码与解码工具") encode_method = gr.Radio(["二进制", "摩斯电码"], label="编码方法", value="二进制") with gr.Tab("编码"): with gr.Row(): with gr.Column(): input_text = gr.Textbox(label="输入文本", lines=5, placeholder="Someone tell Vedal there is a problem with my AI") with gr.Column(): output_code = gr.Textbox(label="编码结果", lines=5) encode_btn = gr.Button("编码") with gr.Tab("解码"): with gr.Row(): # decode_method = gr.Radio(["二进制", "摩斯电码"], label="解码方法", value="二进制") with gr.Column(): input_code = gr.Textbox(label="输入编码", lines=5, placeholder="请输入要解码的编码") with gr.Column(): output_text = gr.Textbox(label="解码结果", lines=5) decode_btn = gr.Button("解码") # 设置按钮点击事件 encode_btn.click(fn=process_encoding, inputs=[input_text, encode_method], outputs=output_code) decode_btn.click(fn=process_decoding, inputs=[input_code, encode_method], outputs=output_text) # 启动应用 if __name__ == "__main__": demo.launch()