天道酬勤,学无止境

unicode

我如何在 C 中对 unicode 字符进行词法分析?(How do I lex unicode characters in C?)

问题 我已经用 C 编写了一个词法分析器,它目前可以成功地以 ASCII 格式解析文件,但是我很困惑我将如何 lex unicode。 我需要什么 unicode 来进行 lex,例如我是否应该支持 utf-8、utf-16 等。 Rust 或 Go 等语言支持什么? 如果是这样,是否有任何图书馆可以帮助我,尽管我更愿意自己尝试这样做,以便我可以学习。 即便如此,一个我可以阅读以学习的小型图书馆也会很棒。 回答1 已经有 lex 版本(以及其他支持 UniCode 的词法分析器工具),它们在维基百科页面上列出:词法分析器生成器列表。 维基百科解析器页面上还有一个词法分析器工具列表。 总之,以下工具处理 UniCode: JavaCC - JavaCC 生成用 Java 编写的词法分析器。 JFLex - Java 的词法分析器生成器。 Quex - 用于 C 和 C++ 的快速通用词法分析器生成器。 FsLex - 用于 F# 字节和 Unicode 字符输入的词法分析器生成器 当然,还有 W3.org 使用的技术,@jim mcnamara 在 http://www.w3.org/2005/03/23-lex-U 上引用了这些技术。 您说您已经用C编写了自己的词法分析器,但是您已经将标签lex用于名为lex的工具; 也许这是一个疏忽? 你在评论里说你没用过正则表达式,还想学。

2021-09-20 03:27:40    分类:技术分享    c   unicode   lex

Qt 和 unicode 转义字符串(Qt and unicode escape string)

问题 我使用信号和插槽从服务器数据中获取。 这是插槽部分: QString text(this->reply->readAll()); 问题是,文本变量将是 unicode 转义,例如: \u043d\u0435 \u043f\u0430\u0440\u044c\u0441\u044f ;-) 有什么办法可以转换这个吗? 回答1 你试过了吗: QString text = QString::fromUtf8(this->reply->readAll()); http://doc.qt.io/qt-5/qstring.html#fromUtf8 假设它是 Utf8,否则使用 fromUtf16 回答2 我认为这就是你需要的: (使用正则表达式查找 \uCCCC 的出现,并用基数为 16 的带有 unicode 编号 CCCC 的 QChar 替换它们) QRegExp rx("(\\\\u[0-9a-fA-F]{4})"); int pos = 0; while ((pos = rx.indexIn(str, pos)) != -1) { str.replace(pos++, 6, QChar(rx.cap(1).right(4).toUShort(0, 16))); } 回答3 这个怎么样?? QString text = reply->readAll().replace("\"

2021-09-20 01:35:17    分类:技术分享    qt   unicode   utf-8   escaping

Xcode 6.3 和 Swift:Unicode 实用程序(例如 UCKeyTranslate)不可用?(Xcode 6.3 and Swift: Unicode Utilities (e.g. UCKeyTranslate) are not available?)

问题 我有以下测试代码: import Cocoa import Carbon let x = kUCKeyActionDisplay 在 Xcode 6.2 中没有问题,但在 Xcode 6.3 中此代码会引发错误。 错误消息是: Use of unresolved identifier 'kUCKeyActionDisplay' 。 为什么我无法访问UnicodeUtilities命名空间? 回答1 根据 OSX 10.10.3 API 文档,由于某种原因,它在 Swift 中不再可用。 但是,您仍然可以在 Objective-C 中以相同的方式访问它们(即@import CoreServices; ) 我刚刚在 Objective-C 中编写了需要它们的代码——你当然可以创建一个包装器。

2021-09-19 23:10:28    分类:技术分享    xcode   swift   unicode

什么 .NET UnmanagedType 是 Unicode (UTF-16)?(What .NET UnmanagedType is Unicode (UTF-16)?)

问题 我正在将字节打包到一个结构中,其中一些对应于 Unicode 字符串。 以下适用于 ASCII 字符串: [StructLayout(LayoutKind.Sequential)] private struct PacketBytes { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] public string MyString; } 我以为我可以做到 [StructLayout(LayoutKind.Sequential)] private struct PacketBytes { [MarshalAs(UnmanagedType.LPWStr, SizeConst = 32)] public string MyString; } 使其成为Unicode,但这不起作用(字段值为空,其他字段的值不正确,表明字节解包被搞砸了)。 (由于此字段是具有其他字段的结构的一部分,为了清楚起见,我已将其省略,因此我不能简单地更改包含结构的 CharSet。) 知道我做错了什么吗? 这是输入(64 字节,小端): 31:00:31:00:32:00:33:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

2021-09-19 22:47:13    分类:技术分享    .net   unicode   unmanaged   marshalling

.NET 正则表达式匹配来自任何语言的任何类型的字母(.NET Regular Expression to match any kind of letter from any language)

问题 我可以使用哪个正则表达式来匹配(允许)来自任何语言的任何类型的字母? 我需要匹配任何字母,包括任何变音符号(例如,á、ü、ñ)并排除任何类型的符号(数学符号、货币符号、dingbats、方框绘图字符等)和标点符号。 我正在使用 ASP.NET MVC 2 和 .NET 4。我在我的视图模型中尝试过这个注释 [RegularExpression(@"\p{L}*", ... 还有这个 [RegularExpression(@"\p{L}\p{M}*", ... 但客户端验证拒绝重音字符。 更新:感谢您的所有回答。 您的建议有效,但仅适用于 .NET,这里的问题是它还使用正则表达式进行 JavaScript 客户端验证。 我不得不去 [^0-9_\|°¬!#\$%/\\\(\)\?¡¿\+\{\}\[\]:\.\,;@ª^\*<>=&] 这是非常丑陋的,并没有涵盖所有场景,但最接近我需要的东西。 回答1 需要注意的一件事是客户端正则表达式。 它在客户端使用 javascript regex,在服务器端使用 .net regex。 Javascript 不支持这种情况。 回答2 您可以使用 Char.IsLetter: 指示指定的 Unicode 字符是否归类为 Unicode 字母。 使用 .Net 4.0: string onlyLetters = String.Concat

2021-09-19 21:52:33    分类:技术分享    javascript   .net   regex   unicode   asp.net-mvc-2

为什么在我的网页上随机出现问号?(Why on my web-page there is question mark in random place?)

问题 我通过 Razor 生成网页,有时浏览器会向我显示问号而不是一个随机的 unicode 字符。 例如: 我认为,这个问号显示在一个 tcp-package 中双字节 unicode 字符的第一个字节和另一个 tcp-package 中字符的第二个字节的位置。 但是为什么浏览器不能正确粘贴它们呢? 所有由 utf-8 编码的文件。 有<meta charset="utf-8"> 。 更新 问号取决于页面内容。 如果我更改问号前的内容,它可能会消失或移动到其他地方(替换其他字符) 回答1 使用 UTF-8 编码方案对字符进行编码并不是您在使用编码时唯一应该考虑的事情。 字体系列在这方面也发挥了重要作用,可以为所有角色渲染正确的图形; 字符毕竟只是图形绘制的字形。 Unicode 负责处理字符的所有字节(1、2、3、4 大小),并在屏幕上显示正确的字符; 如果您的框架或字体系列支持字形。 在您的网站中,字体系列; 可能是自定义加载的,不支持此字符(或更具体的代码页),这就是浏览器必须回退以显示问号的原因。 您还说该字符是随机选择的,因此定义了问题,因为它是基于字体系列的问题。 我建议您在'Segoe UI'字体系列中试用您的应用程序,看看是否有效; 因为那可能会奏效。 除了我的建议,请确保字体系列确实支持该字符所在的代码页。 否则,它会显示一个问号。

2021-09-19 08:09:21    分类:技术分享    asp.net   asp.net-mvc   razor   unicode   utf-8

jquery-textcomplete 不适用于 Unicode 字符,并且缺少空格(jquery-textcomplete not working with Unicode characters, and missing space)

问题 1.我正在尝试将 jquery-textcomplete 与 Unicode 字符串数组一起使用。 当我输入一个英文单词时,它可以正常工作,但没有建议使用 Unicode 单词。 我认为问题在于“术语” 。 检查下面的代码,请帮助我: var words = ['සහන', 'වනක', 'google', 'suresh namal', 'facebook', 'github', 'microsoft', 'yahoo', 'stackoverflow']; $('textarea').textcomplete([{ match: /(^|\s)(\w{2,})$/, search: function (term, callback) { callback($.map(words, function (word) { return word.indexOf(term) === 0 ? word : null; })); }, replace: function (word) { return word + ' '; } }]); JS小提琴 2.还有就是回车键有问题。 当我在'stackoverflow '之后输入'google' 时,它看起来像'stackoverflowgoogle' 。 'stackoverflow'和'google'之间没有空格。 我该如何解决?

2021-09-19 07:53:33    分类:技术分享    javascript   jquery   unicode

Android 音译(Transliteration with Android)

问题 我想在 Android 应用程序中将文本从任意(尽可能)语言音译(而不是翻译!)到英语。 有内置方法吗? 我发现 https://android.googlesource.com/platform/libcore/+/master/luni/src/main/java/libcore/icu/Transliterator.java 但它似乎默认不可用(在至少IDE没有找到它)。 我是否只需要添加此代码,如我在哪里可以获得 JAR 以导入 libcore.io 中的注释所建议的那样? 或者,我可以将 ICU4J 添加到依赖项中,然后将 icu4j 西里尔文转为拉丁文。 但这是一个非常大的依赖项(尽管 Proguard 应该会有所帮助)。 最后,我可以轻松地自己添加西里尔文的音译,然后等到/如果有人真的需要其他语言(有明显的缺点)。 回答1 在底层,Android 在android.icu下拥有所有可用的 ICU4J,但只有一个子集作为公共 API 公开。 如果您想使用未公开的类,您可以编写使用该类的代码,它应该可以正常工作。 但是,这样做在技术上不受支持,因此可能有某个版本的 Android 由于某种原因没有该类并导致您的代码中断。 (这在实践中不太可能发生,但仍有可能发生。) 注意:命名空间android.icu是在 Android 7 Nougat 中添加的

2021-09-19 06:14:49    分类:技术分享    java   android   unicode   icu

如何从 c# 中的 robocopy 过程标准输出中获取 unicode 字符(How can I get unicode characters from robocopy process standard ouput in c#)

问题 我们的应用程序运行各种操作并在日志窗口中显示输出。 一种操作是使用robocopy在文件夹之间复制文件。 这可以正常工作,直到 robocopy 输出包含 unicode 字符。 我知道我需要使用 /unicode 选项,但我似乎得到的只是胡言乱语。 这是我的简化代码示例: class Program { static void Main(string[] args) { StreamReader outputReader = null; StreamReader errorReader = null; using (Process process = new Process()) { Encoding encoding = Encoding.Default; if (encoding != null) { process.StartInfo.StandardOutputEncoding = encoding; process.StartInfo.StandardErrorEncoding = encoding; } process.StartInfo.FileName = @"C:\Windows\system32\robocopy.exe"; process.StartInfo.Arguments = @"""D:\temp\некоторые случайные

2021-09-19 05:18:33    分类:技术分享    c#   unicode   process   stdout   Robocopy

MultiByteToWideChar 用于 Unicode 代码页 1200、1201、12000、12001(MultiByteToWideChar for Unicode code pages 1200, 1201, 12000, 12001)

问题 我有一个函数可以将字符串从各种编码转换为 Windows 内部使用的 Unicode-16。 为此,我使用了 MultiByteToWideChar API。 但我刚刚发现以下内容: //See how much data do we need? //UNIT nCodePage = 1201; // just as an example UINT nchLen = ::MultiByteToWideChar(nCodePage, 0, pByteArrayToConvert, ncbSzByteArrayToConvert, NULL, 0); if(!nchLen) { //Failed } 以下 Unicode 代码页失败,错误代码为ERROR_INVALID_PARAMETER (87): > 1200 utf-16 Unicode UTF-16, little endian byte order > 1201 unicodeFFFE Unicode UTF-16, big endian byte order > 12000 utf-32 Unicode UTF-32, little endian byte order > 12001 utf-32BE Unicode UTF-32, big endian byte order 知道为什么以及如何进行这些转换吗?

2021-09-19 04:35:14    分类:技术分享    c++   windows   winapi   unicode