Moonshine(用于日落C库的.NET Markdown包装器)无法正确处理非英文字符

时间:2012-05-30 13:09:30

标签: .net markdown

如果我对非英文字符使用Moonshine(https://github.com/brandonc/moonshine) - 例如,如果我运行以下文字

The following is italic Arabic text: *مرحبا، كيف حالك اليوم؟*

通过参数

的github项目中提供的控制台应用程序

extensions = Sundown.MarkdownExtensions.NoIntraEmphasis | Sundown.MarkdownExtensions.FencedCode | Sundown.MarkdownExtensions.AutoLink smartypants = false

输出结果为:

<p>The following is italic Arabic text: <em>?????? ??? ???? ??????</em></p>

我怎样才能让它正确传回来?

感谢
穆斯塔法

修改

所以我注意到在Moonshine.cs包装器中,传递给Sundown库的缓冲区定义如下:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
struct buf
{
    [MarshalAs(UnmanagedType.LPStr)]
    public string data;     /* actual character data */
    public uint size;       /* size of the string */
    public uint asize;      /* allocated size (0 = volatile buffer) */
    public uint unit;       /* reallocation unit size (0 = read-only buffer) */
    public int @ref;        /* reference count */
};

Charset定义为Ansistring data被封送为LPStr的位置。不幸的是,将其更改为

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct buf
{
    [MarshalAs(UnmanagedType.LPWStr)]
    public string data;     /* actual character data */
    public uint size;       /* size of the string */
    public uint asize;      /* allocated size (0 = volatile buffer) */
    public uint unit;       /* reallocation unit size (0 = read-only buffer) */
    public int @ref;        /* reference count */
};

没有帮助,因为现在收到的输出是错误编码的文本:

瀼吾栀攀 昀漀氀氀漀眀椀渀最 椀猀 戀漀氀搀 䄀爀愀戀椀挀 琀攀砀琀⼼㹰༊ҧÄȪ

再次感谢。

1 个答案:

答案 0 :(得分:0)

我们从来没有找到一个干净的解决方案来解决这个问题并最终转换为与Moonshine表现相似的MarkdownDeep(https://github.com/toptensoftware/markdowndeep),适用于UTF8,并且不要求我们在我们的App上使用32位模式将我们的应用程序汇集或编译为目标x86,这对我们来说效果更好。

感谢
穆斯塔法