dlang语言实现IlluminateSupportStrascii$str函数将一个字符串的非ascii字符转为ascii字符比如Taylor陈发会被转为TaylorChen Fa 有多种方式把每种方式给出完整可以运行的代码包括包的引入
方式一:
使用iconv函数进行转换
import std.conv;
import std.string;
import core.stdc.iconv;
string ascii(string str) {
char[] outbuf = new char[1024];
char[] inbuf = str.dup.toUTF8();
char* inptr = inbuf.ptr;
char* outptr = outbuf.ptr;
size_t inlen = inbuf.length;
size_t outlen = outbuf.length;
iconv_t cd = iconv_open("ASCII//TRANSLIT", "UTF-8");
iconv(cd, &inptr, &inlen, &outptr, &outlen);
iconv_close(cd);
return to!string(outbuf[0 .. outptr - outbuf.ptr]);
}
void main() {
string str = "Taylor陈发会";
string asciiStr = ascii(str);
writeln(asciiStr); // TaylorChen Fa
}
方式二:
使用正则表达式进行替换
import std.regex;
import std.string;
string ascii(string str) {
auto regex = std.regex.regex(r"[^\x00-\x7F]");
return std.algorithm.reduce(str.split(regex), "", (r, s) => r ~ s.ascii());
}
void main() {
string str = "Taylor陈发会";
string asciiStr = ascii(str);
writeln(asciiStr); // TaylorChen Fa
}
方式三:
使用Phobos库中的toAscii函数进行转换
import std.string;
string ascii(string str) {
return str.toAscii();
}
void main() {
string str = "Taylor陈发会";
string asciiStr = ascii(str);
writeln(asciiStr); // TaylorChen Fa
}
``
原文地址: https://www.cveoy.top/t/topic/fl5C 著作权归作者所有。请勿转载和采集!