中文与摩斯密码互转
创作时间:
作者:
@小白创作中心
中文与摩斯密码互转
引用
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”或者右键网页空白页面点击检查,点击下类似的标识查看具体报错信息查询。
如果在使用过程中遇到任何问题,欢迎在评论区留言,虽然可能不会及时回复,但会尽量提供帮助。
热门推荐
电动自行车、电动摩托车如何区分?如何上牌?详细解读来了!
2025年电动车、三轮车政策全面放宽!上牌、上路、考证更轻松
儿童乐园的包容性设计:创造一个无障碍的游乐空间
电影衍生品蕴含的大生意
人才发展经理的职责是什么?
甲泼尼龙副作用和危害有哪些
一句话拿捏百万男人,卖男裤的高端姐成抖音第一
如何合法请求酒店提供监控视频
同居:现代都市恋爱的挑战与机遇
常用深度学习神经网络及其原理与应用场景
项目经理如何做行动计划
公积金换算工资怎么计算?
最新研究:植物来源的欧米伽3脂肪酸降低心脏病风险20%
陶喆有多猛?李宗盛都登门向他学习
乌梅:天然的降尿酸小能手
八字命理中的“食神”:含义、搭配与计算方法
这首世人熟知的《枫桥夜泊》,藏着最为通透的人生至理,读后受益匪浅
八大架构图全解析:打造高效系统的视觉指南
2024年加州大学各分校优势专业推荐!
如何处理突如其来的巨额财富?
如何合理规划意外之财的使用?这些规划存在哪些潜在问题?
深入理解DPI:图像处理与打印质量的重要指标解析
DPI是什么意思?全面解析屏幕分辨率背后的技术原理
房产纠纷实例:房屋登记人行为能力受限,监护人擅自卖房合同无效
上火引起口腔内壁血泡怎么办
心肌梗死后的快速康复,你还需要了解这些
人工智能如何处理爱情?
在学校怎么吃才能减肥 ?5个将食堂变成健康饮食的窍门
安全抗干扰WiFi设置指南:提高信号质量的秘诀!
简易交通灯电路设计实验详解