如何用缩进写一个阿拉伯语文本文件?

时间:2018-05-15 13:39:33

标签: c# file office-interop arabic arabic-support

在我目前的工作中,我需要从.docx文件中读取内容并将其内容写入纯文本文件,该文件将输入其他任务。

下面是我的示例代码,对我来说对大多数语言都有用,但对于阿拉伯语,我有一个问题,因为阿拉伯语是从右到左。

StringBuilder docText = new StringBuilder();
Document currentDoc = word.Documents.Open(file.FullName);
foreach (Paragraph p in currentDoc.Paragraphs)
{
    string paraText = p.Range.Text;
    docText.AppendLine(paraText);
}
currentDoc.Close(false);
if (docText.Length > 0)
{
    string outputTxtpath = output + @"\" + Path.GetFileNameWithoutExtension(file.Name) + ".txt";
    File.WriteAllText(outputTxtpath, docText.ToString(), Encoding.UTF8);
}

对于阿拉伯语,我面临两个问题:

  1. txt文件中的文字位于左缩进。
  2. 如果段落以数字(图像1)开头,那么该数字在文本文件(图像2)的左侧,而其他阿拉伯字符序列就是这样,这是我的第二个工具的问题。
  3. 示例输入(.docx文件)和输出(.txt文件)上传到以下位置。我搜索了很多问题,但我到处都找到了解读阿拉伯语文本文件的方法。

    Docx文件:https://1drv.ms/w/s!Ah-Jh2Ok5SuHgQEl90D9NXlM0CJw
    文本文件:https://1drv.ms/t/s!Ah-Jh2Ok5SuHgQAEPZur1A3379mr

    OriginalText from DOCX file
    Converted Text from TXT file

1 个答案:

答案 0 :(得分:0)

我建议使用内部there方法保存File.ReadAllByted("../../Files/filename"); 文件略有不同,使用Document.SaveAs2作为输出格式。

这允许您使用Encoded Text,它应涵盖所有可能的语言编码。

它还允许您指定应如何处理双向标记。如果此运动设置为Word.Document,则保留双向原始设置。

true

这是RichTextBox控件中显示的结果。

Microsoft Office Unicode encoding

作为Microsoft.Office.Interop.Word.Application WordApplication = new Microsoft.Office.Interop.Word.Application(); Microsoft.Office.Interop.Word.Document DefaultDocument; DefaultDocument = WordApplication.Documents.Open(FilePath); CultureInfo culture = new CultureInfo((int)DefaultDocument.Content.LanguageID); string SaveFileName = Path.Combine(Path.GetDirectoryName(FilePath), Path.GetFileNameWithoutExtension(FilePath)); DefaultDocument.SaveAs2(SaveFileName, WdSaveFormat.wdFormatEncodedText, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, MsoEncoding.msoEncodingUnicodeLittleEndian, Type.Missing, Type.Missing, Type.Missing, true); //<- BiDi Marks //Release the Document foreach (Document WDocument in WordApplication.Documents) { WDocument.Close(WdSaveOptions.wdDoNotSaveChanges); Marshal.ReleaseComObject(WDocument); } //Release the WINWORD Process WordApplication.Quit(WdSaveOptions.wdDoNotSaveChanges); Marshal.ReleaseComObject(WordApplication); Marshal.CleanupUnusedObjectsInCurrentContext(); //Test the results using a RichTextBox richTextBox1.RightToLeft = (culture.TextInfo.IsRightToLeft) ? RightToLeft.Yes : RightToLeft.No; richTextBox1.ImeMode = ImeMode.On; richTextBox1.Text = File.ReadAllText(SaveFileName + ".txt"); 的替代方法,您可以从enter image description here数值派生编码,该值引用Document.SaveAs2文化标识符(LCID)。
CultureInfo已在前面的代码中定义)

culture