打开vivado看到的是乱码?别着急,一个程序批量搞定!

vivado打开工程,可能发现verilog代码中的中文注释竟然是乱码,这大概率上是vivado的默认编码格式和你工程文件的编码格式不同导致的。

vivado中新建verilog文件时默认编码格式通常是UTF-8,这是一种广泛使用的Unicode字符编码,能够支持多种语言和特殊字符,同时对于ASCII字符集也保持了良好的兼容性。

ASCII是最基本的编码,只包含128个字符;仅支持英文字母、数字和一些符号;每个字符用1个字节表示。

ANSI (Windows-1252):扩展了ASCII,包含256个字符;增加了一些欧洲语言字符;每个字符仍用1个字节表示。

Unicode:统一的字符集,包含世界上几乎所有的字符;不是编码方式,而是字符集标准;为每个字符分配唯一的码点(code point)。

UTF-8:Unicode的一种编码方式;变长编码,使用1-4个字节表示一个字符;兼容ASCII,广泛应用于网页和文件系统。

GB2312/GBK (中文编码):专门用于中文字符的编码方式,包含6763个汉字,GBK是其扩展版本。

上面这些编码格式的主要区别在于:支持的字符范围;编码长度(固定或变长);空间效率;兼容性(如UTF-8兼容ASCII);适用场景(如GB2312/GBK专用于中文)。

遇到问题有意识的上网查看解决方法,你的问题就解决大半了。但网上的解决方法都是教你用其他编辑器打开文件,通过在编辑器中选择编码方式,然后保存。成功后再在vivado中打开就没有乱码了。

虽然这是一种解决问题的方法,可是当你的工程有很多文件,每个文件都有乱码,你总不能手动挨个打开、修改然后保存吧。这时候你作为软硬件技术开发人员的优势就显现出来了。

对,没错,用写程序的方式批量操作。

首先先看下你电脑是否已成功安装了python ,今天我们就用python写一个批量处理的程序即可,并给它做一个简洁的界面,最后打包成可执行文件,供大家直接使用。

图1.png

在使用前先确保已经安装了必要的xxx库,可以用pip install xxx 来安装。并且建议在处理重要文件之前先进行备份。对于大文件,你可能需要考虑使用分块读写来优化内存使用,这里不做考虑。

import os
import tkinter as tk
from tkinter import filedialog, messagebox
from tkinter import ttk
import chardet
try:
# 主程序代码
    def convert_to_utf8(file_path):
with open(file_path, 'rb') as file:
            raw_data = file.read()
        detected = chardet.detect(raw_data)
encoding = detected['encoding']
if encoding != 'utf-8':
            try:
content = raw_data.decode(encoding)
with open(file_path, 'w', encoding='utf-8') as file:
                    file.write(content)
return True
except:
return False
return False
def batch_convert():
path = path_entry.get()
        file_type = file_type_entry.get()
if not os.path.isdir(path):
            messagebox.showerror("Error", "Invalid directory path")
return
        converted_count = 0
        total_count = 0
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(file_type):
                    total_count += 1
                    file_path = os.path.join(root, file)
if convert_to_utf8(file_path):
                        converted_count += 1
        messagebox.showinfo("Conversion Complete", 
                            f"Converted {converted_count} out of {total_count} files to UTF-8")
# Create main window
    root = tk.Tk()
    root.title("Batch UTF-8 Converter")
    root.geometry("600x200")
style = ttk.Style()
    style.theme_use('clam')
# Create and place widgets
    frame = ttk.Frame(root, padding="20")
    frame.pack(fill=tk.BOTH, expand=True)
    path_label = ttk.Label(frame, text="Directory Path:")
    path_label.grid(row=0, column=0, sticky=tk.W, pady=5)
    path_entry = ttk.Entry(frame, width=40)
    path_entry.grid(row=0, column=1, pady=5)
    browse_button = ttk.Button(frame, text="Browse", command=lambda: path_entry.insert(0, filedialog.askdirectory()))
    browse_button.grid(row=0, column=2, padx=5, pady=5)
    file_type_label = ttk.Label(frame, text="File Type (e.g. .txt):")
    file_type_label.grid(row=1, column=0, sticky=tk.W, pady=5)
    file_type_entry = ttk.Entry(frame, width=40)
    file_type_entry.grid(row=1, column=1, pady=5)
    convert_button = ttk.Button(frame, text="Convert to UTF-8", command=batch_convert)
    convert_button.grid(row=2, column=1, pady=20)
    root.mainloop()
except Exception as e:
    print(f"An error occurred: {e}")
input("Press Enter to exit...")


这段代码会递归地遍历指定目录下的所有文件,检测每个文件的编码,然后将其转换为UTF-8格式,它具有以下功能:使用chardet库来自动检测文件的原始编码;可以处理不同类型的文本文件,如.v,.txt, .py, .html, .xml等;使用临时文件来确保转换过程的安全性;提供了错误处理,以应对可能的解码或编码错误。

图2.png

auto-py-to-exe是一个基于PyInstaller的图形界面工具,使用起来更加直观。使用pip install auto-py-to-exe进行安装。

文章转载自: 软硬件技术开发

最新文章

最新文章