8000 GitHub - glcolor/char16_converter: automate change wchar_t strings (like L"foo") to char16_t strings
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

glcolor/char16_converter

Repository files navigation

char16_converter

将wchar_t格式字符串转换为char16_t格式。

因为MSVC自VS2017开始才完整的支持char16_t特性,为了能让让程序可以同时在VS2017与早期版本中正确编译,需要一个机制来做兼容性处理。

一个最简单的做法是,定义一个宏,比如_u或u16:

如果是VS2017,则定义如下:

#define u16(X) u##X
#define _u(X) u##X

如果是之前的版本,则定义如下:

#define u16(X) L##X
#define _u(X) L##X

但是代码中有大量的形如L"xxx"的字符串需要进行修改,这无疑是极大的工作量,考虑到需要替换的规则并不复杂,我们可以选择使用正则表达式替换,也可以选择使用专门的工具。

我个人觉得,写一个程序会比较简单,所以有了这个项目,使用词法分析器解析源代码,遇到wchar_t字符串则替换为用前面定义的宏包围的形式,并把结果写回文件。

注意:本程序会根据源代码文件的BOM信息检测源代码文件的字符集,并最终以UTF-8(含BOM)的编码形式写回源文件。对于不带BOM信息的源代码文件,默认为ANSI编码。

为了统一期间,已有的u"xxx"字符串也会被修改。

本程序支持的后缀名有:*.h *.hpp *.hxx *.c *.cpp *.cxx *.cc

该程序为命令行程序,使用方式为:

u16_converter.exe -f=文件或目录名 [选项] ...
options:
  -p, 宏定义的名字,默认使用_u
  -f, 要转换的文件,或文件目录(遍历目录及所有子目录下的所有源代码文件)
  -d, 指定-f参数指定的是文件还是目录,默认为文件
  -e, 是否将无扩展名文件视为C++文件,默认为false
  -?, 打印帮助信息

示例: u16_converter.exe -f=e:\code\testproject -d -p u16

该命令将e:\code\testproject目录下所有C++源代码文件中的L""字符串替换为u16("")字符串。

本程序使用Microsoft Visual Studio 2017 社区版开发。

本程序的命令行解析使用了Hideyuki Tanaka的cmdline模块。

本程序的词法分析器参考Andreas Jönsson的AngelScript脚本语言的词法分析器实现。

本程序的源码基于MIT协议开放。

About

automate change wchar_t strings (like L"foo") to char16_t strings

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0