1

Тема: проблема с кодировкой?

Текст книги, созданный в индезайн экспортирован в PDF  а далее сохранён как word.
При открытии word 2003 одной из глав с текстом всё нормально за исключением того, что все слова подчёркивает орфография красным. Однако при открывании этого же файла на любом другом компе, любым вордом текст частично превращается в кракозябры. С другими главами всё нормально.
Испробовал всё. запрос кодировки при открытии, открывать как созданный word 2003.
Ничего не помогает.
Файл прилагаю.
Помогите пожалуйста!!!

Post's attachments

00_lg1.docx 61.41 Кб, 3 скачиваний с 2017-11-06 

You don't have the permssions to download the attachments of this post.

2

Re: проблема с кодировкой?

Если актуально то файл в приложении.

Метод

Sub convertABC848()
j = 848
Dim chcode, i As Integer

Application.ScreenUpdating = False
For i = 1 To ActiveDocument.Characters.Count
chcode = AscW(ActiveDocument.Range.Characters(i).Text)

If chcode > 191 And chcode < 256 Then
 chcode = chcode + j
 ActiveDocument.Range.Characters(i).Text = ChrW(chcode)

End If
Next i
Application.ScreenUpdating = True
End Sub

Код вставить в VBA.

Рекомендую поделить файл на несколько файлов, содержащих не более 10 страниц. Метод тупого перебора, крайне медленный. 10 страниц - 15-20 мин.  Для единичного случая пойдет...

Post's attachments

Change by AlexStar 00_lg1.docx 67.54 Кб, 2 скачиваний с 2017-11-07 

You don't have the permssions to download the attachments of this post.
"Ты не умничай, ты пальцем покажи"
"Кто поработал с многоуровневым списком в Ворде, тот в цирке не смеется"

3

Re: проблема с кодировкой?

Фантастика! Как вам это удалось?
Только не понял что произошло с файлом, по какой причине, почему только с одной главой,
и что делает этот код?

4

Re: проблема с кодировкой?

У вас файл из 10 страниц. У меня столько открылось

"Ты не умничай, ты пальцем покажи"
"Кто поработал с многоуровневым списком в Ворде, тот в цирке не смеется"

5

Re: проблема с кодировкой?

В разы быстрее:

Sub convertABC848r1()
j = 848
Dim chcode, i As Integer
Dim PRG As Paragraph

Application.ScreenUpdating = False
For Each PRG In ActiveDocument.Paragraphs
  If Len(PRG.Range.Text) > 1 Then
  For i = 1 To Len(PRG.Range.Text) - 1
    chcode = AscW(Mid(PRG.Range.Text, i, 1))
    If chcode > 191 And chcode < 256 Then
     PRG.Range.Characters(i).Text = ChrW(chcode + j)
    End If
  Next i
  End If
Next PRG
Application.ScreenUpdating = True
End Sub
"Ты не умничай, ты пальцем покажи"
"Кто поработал с многоуровневым списком в Ворде, тот в цирке не смеется"

6

Re: проблема с кодировкой?

Вот теперь "фантастический вариант"!

Sub convertABC848v2()
j = 848
ActiveDocument.Range.Select
   For i = 192 To 255
      With Selection.Find
        .Text = ChrW(i)
        .Replacement.Text = ChrW(i + j)
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute Replace:=wdReplaceAll
    End With
   Next i
End Sub
"Ты не умничай, ты пальцем покажи"
"Кто поработал с многоуровневым списком в Ворде, тот в цирке не смеется"

7

Re: проблема с кодировкой?

Файл из 50 страниц.

8

Re: проблема с кодировкой?

Спасибо отлично работает. Правда на двух страницах из 50-и 3 фразы остались почему-то непереведёнными.
Скажите пожалуйста что делает этот макрос?

9

Re: проблема с кодировкой?

Рассматриваемый файл включает минимум две кодировки символов. Часть символов имеет кодировку, применяемую в настоящее время в современных операционных системах, а подавляющая часть текста в кодировке ANSI которая была актуальна в прошлом веке. Полагаю, методы, которые вы использовали для перекодировки, не могли учитывать такую  «засаду», как две кодировки, поэтому мы с вами ведем диалог на странице этого форума.
Задача макроса найти в тексте символы в кодировке ANSI и «превратить их в кодировку Unicode.
Первый предложенный вариант перебирает по порядку все символы в тексте. Тут возникла проблема – это скорость алгоритма. (Если интересно можно обсудить).
Второй вариант также перебирает символы, но уже в параграфах. Благодаря такому подходу время преобразования 10 страниц составило 5 сек, а если вспомнить про первый вариант с 15 минутами, прогресс налицо.
Третий вариант использует метод «найти и заменить». Цикл начинается с 192 и заканчивается 255. Это кодировка ANSI. В цикл вставляем метод «найти и заменить» и в случае удачного поиска заменяем символ на такой же, но с другой кодировкой.
Скорость 2 и 3 варианта приблизительно одинакова.
Что касается непреобразованного текста, то смею предположить, что текст находится в колонтитулах, графических объектах или имеет другую кодировку. Если актуально, вырежьте страницу из документа и прикрепите в качестве нового документа к сообщению.

"Ты не умничай, ты пальцем покажи"
"Кто поработал с многоуровневым списком в Ворде, тот в цирке не смеется"

10

Re: проблема с кодировкой?

Спасибо!
Файл прилагаю.

11

Re: проблема с кодировкой?

Опа! Не понимаю как приложить файл.

12

Re: проблема с кодировкой?

AlexStar пишет:

Рассматриваемый файл включает минимум две кодировки символов. Часть символов имеет кодировку, применяемую в настоящее время в современных операционных системах, а подавляющая часть текста в кодировке ANSI которая была актуальна в прошлом веке. Полагаю, методы, которые вы использовали для перекодировки, не могли учитывать такую  «засаду», как две кодировки, поэтому мы с вами ведем диалог на странице этого форума.
Задача макроса найти в тексте символы в кодировке ANSI и «превратить их в кодировку Unicode.
Первый предложенный вариант перебирает по порядку все символы в тексте. Тут возникла проблема – это скорость алгоритма. (Если интересно можно обсудить).
Второй вариант также перебирает символы, но уже в параграфах. Благодаря такому подходу время преобразования 10 страниц составило 5 сек, а если вспомнить про первый вариант с 15 минутами, прогресс налицо.
Третий вариант использует метод «найти и заменить». Цикл начинается с 192 и заканчивается 255. Это кодировка ANSI. В цикл вставляем метод «найти и заменить» и в случае удачного поиска заменяем символ на такой же, но с другой кодировкой.
Скорость 2 и 3 варианта приблизительно одинакова.
Что касается непреобразованного текста, то смею предположить, что текст находится в колонтитулах, графических объектах или имеет другую кодировку. Если актуально, вырежьте страницу из документа и прикрепите в качестве нового документа к сообщению.

Post's attachments

00_lg2.docx 330.73 Кб, 1 скачиваний с 2017-11-08 

You don't have the permssions to download the attachments of this post.

13

Re: проблема с кодировкой?

Как и предполагал, не распознанный текст находится в колонтитулах и в TextBox. В приложении ваш правленый файл.
Если вам понадобится выполнить перекодировку текста, вам необходимо:
- привязать третий вариант макроса на кнопку (так легче)
- поставить знак комментария ' перед ActiveDocument.Range.Select

Код будет выполнятся над любым выделенным фрагментом текста.

Post's attachments

00_lg2.docx 332.84 Кб, 1 скачиваний с 2017-11-08 

You don't have the permssions to download the attachments of this post.
"Ты не умничай, ты пальцем покажи"
"Кто поработал с многоуровневым списком в Ворде, тот в цирке не смеется"