中文与摩斯密码互转
创作时间:
作者:
@小白创作中心
中文与摩斯密码互转
引用
CSDN
1.
https://blog.csdn.net/m0_72942006/article/details/145229485
最近发现了一个很有意思的程序!这个程序可以将输入的中文转化成摩斯密码,还可以通过摩斯密码再转化回中文,是不是特别神奇?
让我们分析一下这个程序的实现思路。首先尝试使用pypinyin模块将中文转换成拼音,但由于中文同音字太多,这种方法并不可行。后来通过知乎上“吱你太美”用户的启发,找到了一个更好的解决方案。
我们可以考虑以下步骤来实现中文到摩斯码的转换:
- 中文到Unicode编码:首先将中文字符转换为它们对应的Unicode编码。
- Unicode编码到摩斯码:然后将这些Unicode编码转换为摩斯码表示。
- 摩斯码到Unicode编码:在解密时,先将摩斯码转换回Unicode编码。
- Unicode编码到中文:最后将Unicode编码转换回中文字符
这种方法非常巧妙,让我们来看一下具体的Python实现代码:
from flask import Flask, request, jsonify
from flask_cors import CORS
import logging
# 设置日志记录
logging.basicConfig(level=logging.INFO)
app = Flask(__name__)
CORS(app) # 允许所有来源的请求,生产环境中应更具体地配置
# 摩斯密码映射表(仅包含基本字符)
morse_code_map = {
'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': '--..', '0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-',
'5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.', '.': '.-.-.-', ',': '--..--',
'?': '..--..', '\'': '.----.', '!': '-.-.--', '/': '-..-.', '(': '-.--.', ')': '-.--.-', '&': '.-...',
':': '---...', ';': '-.-.-.', '=': '-...-', '+': '.-.-.', '-': '-....-', '_': '..--.-', '"': '.-..-.',
'$': '...-..-', '@': '.--.-.'
}
reverse_morse_code_map = {v: k for k, v in morse_code_map.items()}
def unicode_to_morse(unicode_str):
"""将中文字符转换为摩斯码"""
morse_parts = []
for char in unicode_str:
code_point = format(ord(char), 'X') # 获取字符的Unicode码点并转换为十六进制字符串
for digit in code_point:
if digit.lower() in morse_code_map:
morse_parts.append(morse_code_map[digit.lower()])
else:
morse_parts.append('?') # 对于无法映射的字符使用问号表示
morse_parts.append(' ') # 码点之间用空格分隔
return ' '.join(morse_parts).strip()
def morse_to_unicode(morse_str):
"""将摩斯码转换回中文字符"""
unicode_parts = []
morse_digits = morse_str.split()
for i in range(0, len(morse_digits), 4):
code_point_digits = morse_digits[i:i+4]
hex_code_point = ''.join([reverse_morse_code_map.get(digit, '?') for digit in code_point_digits])
if len(hex_code_point) == 4 and all(c in '0123456789abcdefABCDEF' for c in hex_code_point):
try:
unicode_char = chr(int(hex_code_point, 16))
unicode_parts.append(unicode_char)
except ValueError:
unicode_parts.append('[?]') # 解码失败时用[?]表示
else:
unicode_parts.append('[?]')
return ''.join(unicode_parts)
@app.route('/translate', methods=['POST', 'OPTIONS'])
def translate():
if request.method == 'OPTIONS':
# 预检请求,直接返回200状态码
return '', 200
data = request.get_json()
action = data.get('action')
text = data.get('text')
if not text or not action:
return jsonify({'error': '请提供文本和操作类型'}), 400
try:
if action == 'encrypt':
result = unicode_to_morse(text)
elif action == 'decrypt':
result = morse_to_unicode(text)
else:
return jsonify({'error': '未知的操作类型'}), 400
return jsonify({'result': result})
except Exception as e:
logging.error(f"翻译过程中出错: {str(e)}")
return jsonify({'error': '服务器内部错误,请检查输入或稍后再试'}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
这里需要安装Flask模块,运行命令如下:
#Linux
pip3 install flask -i https://pypi.tuna.tsinghua.edu.cn/simple/
#Windows
pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple/
除安装模块外,如果在服务器中运行,还需要保证安全组放行8080端口。接下来是HTML前端部分:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>中文与摩斯密码互转</title>
<style>
body {
font-family: Arial, sans-serif;
padding: 20px;
}
textarea {
width: 100%;
height: 150px;
margin-bottom: 10px;
}
button {
padding: 10px 20px;
background-color: #007BFF;
color: white;
border: none;
cursor: pointer;
margin-right: 10px;
}
button:hover {
background-color: #0056b3;
}
</style>
</head>
<body>
<h1>中文与摩斯密码互转</h1>
<textarea id="inputText" placeholder="请输入中文或摩斯密码"></textarea>
<button id="encryptButton">加密 (中文 → 摩斯)</button>
<button id="decryptButton">解密 (摩斯 → 中文)</button>
<textarea id="outputText" readonly></textarea>
<script>
// 定义translate函数
function translate(action) {
const inputText = document.getElementById('inputText').value;
fetch('http://113.44.153.114:8080/translate', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ action: action, text: inputText })
})
.then(response => {
if (!response.ok) {
throw new Error('网络响应失败');
}
return response.json();
})
.then(data => {
if (data.result) {
document.getElementById('outputText').value = data.result;
} else if (data.error) {
alert(data.error);
} else {
alert('未知错误');
}
})
.catch(error => {
console.error('请求出错:', error);
alert('请求出错,请检查网络连接或稍后再试');
});
}
// 使用事件监听器绑定按钮点击事件
document.addEventListener('DOMContentLoaded', () => {
document.getElementById('encryptButton').addEventListener('click', () => translate('encrypt'));
document.getElementById('decryptButton').addEventListener('click', () => translate('decrypt'));
});
</script>
</body>
</html>
其中在fetch()里的IP地址需要切换成实际的IP地址,这一点非常重要,否则会导致报错。
使用说明
启动Python脚本
终端进入放入Python前端的文件夹(可以使用cd等命令)python app.py
“app.py”是你Python文件的文件名,如果跟你的不一样,需要替换成自己的。没有任何报错说明启动成功!
如果Python脚本启动成功,但进入HTML文件时下面的破译内容加载不出来,可以按“F12”或者右键网页空白页面点击检查,点击下类似的标识查看具体报错信息查询。
如果在使用过程中遇到任何问题,欢迎在评论区留言,虽然可能不会及时回复,但会尽量提供帮助。
热门推荐
公务员申论考试,综合分析题基础解题技巧有哪些?
眼睑脂肪粒怎么去除掉
25-羟维生素D缺乏怎么补
香港青少年银行卡办理指南:从要求到过程的全面分析
《怪物猎人:崛起》重弩枪优缺点介绍
波普风格装修:从色彩到图案的全面解析
怎样控制餐后血糖
医疗保险有什么好处和作用
手机辐射真会致癌吗?专家解析手机使用与充电安全指南
牙齿矫正改变凸嘴
JAMA子刊发布儿童和成人尿路感染的预防、诊断和管理指南
柴犬秋田犬区别
《忠犬八公的故事》忠诚与守候,揭示爱与责任在生活中的意义
过敏性紫癜患者运动指南:科学锻炼助力康复
电脑开机黑屏故障排查与解决方案
营运转非营运车辆报废年限怎么算
后脖颈子长了一个小疙瘩,不痛不痒
如何评估电机产品的性能?这些评估方法有哪些实际应用?
手机上怎么把定期存款取出来?
NVIDIA H100供电线:稳定供电对显卡性能的影响
AI赋能养老 | 让养老变“享”老
千千万万次,为光岳楼之美折服
光岳楼“亮相”央视蛇年春晚
建筑劳务分包协议范本的法律解读与实务操作
给药后观察患者的护理
社区诊所能开病假条吗?一文详解病假相关规定
社区医院能开病假单吗
涉外合同中的弥偿条款是什么?
在青岛,有一种春天叫玉兰花开
唐朝选官新视角:相貌亦成衡量标准