- Сохраните файл в формате CSV с разделителями-запятыми.
- Откройте его в OpenOffice, это позволит вам изменить кодировку на правильную.
- Находясь в OpenOffice, сохраните файл в формате .xls.
Изменить кодировку Excel
Некоторая плохо написанная программа экспортировала файл Excel с неправильной кодировкой на иврите, с такими загадочными строками, как:
ãåç ì÷åçåú äåãòåú åéîé äåìãú
Используя сайт, решающий кодировку, я обнаружил, что исходный текст был:
דוח לקוחות הודעות וימי הולדת
Что, кстати, означает «Клиентские отчеты-уведомления и дни рождения», на иврите.
Есть ли способ изменить кодировку для всего документа из Excel?
2 ответа на вопрос
Это не полное решение, но оно выглядит как шаг к решению.
Обе строки имеют длину 28 символов, что предполагает кодирование «один к одному».
Отображение двух строк в шестнадцатеричном виде дает:
(E3)(E5)(E7)(20)(EC)(F7)(E5)(E7)(E5)(FA)(20)(E4)(E5)(E3)(F2)(E5)(FA)(20)(E5)(E9)(EE)(E9)(20)(E4)(E5)(EC)(E3)(FA) (5D3)(5D5)(5D7)(20)(5DC)(5E7)(5D5)(5D7)(5D5)(5EA)(20)(5D4)(5D5)(5D3)(5E2)(5D5)(5EA)(20)(5D5)(5D9)(5DE)(5D9)(20)(5D4)(5D5)(5DC)(5D3)(5EA)
Вторая строка в основном соответствует значениям Unicode для букв иврита, как и ожидалось.
Преобразование для получения первой строки выглядит так:
20 (space) unchanged 5Dx Ex 5Ex Fx
Это не полная диаграмма преобразования, потому что значения Юникода для букв иврита простираются от шестнадцатеричного 591 до 5F4.
Следующая грубая подпрограмма принимает первую строку и возвращает вторую.
Function Decode(CompactStg As String) As String Dim CompactChar As Integer Dim DecodedChar As Integer Dim DecodedStg As String Dim Pos As Integer DecodedStg = "" For Pos = 1 To Len(CompactStg) CompactChar = Asc(Mid(CompactStg, Pos, 1)) Select Case CompactChar Case 32 To 127 ' Hex 20 - 7F ' No change DecodedChar = CompactChar Case 224 To 239 ' Hex E0 - EF ' Convert EX to 5DX DecodedChar = CompactChar + 1264 Case 240 To 255 ' Hex F0 - FF ' Convert FX to 5EX DecodedChar = CompactChar + 1264 End Select DecodedStg = DecodedStg & ChrW(DecodedChar) Next Decode = DecodedStg End Function
Я использовал следующую процедуру для вывода строк в непосредственное окно. С помощью нескольких примеров вы сможете определить все конверсии. Буквы иврита шестнадцатеричные с 591 по 5C7 также могут быть преобразованы путем добавления десятичной дроби 1264, но это не может быть преобразованием для букв иврита с 5F0 по 5F4.
Sub HexOut(Stg) Dim Pos For Pos = 1 To Len(Stg) Debug.Print "(" & Hex(AscW(Mid(Stg, Pos, 1))) & ")"; Next Debug.Print End Sub
Повеселись!
Похожие вопросы
-
3
Мой файл заблокирован в Excel 2007, что происходит?
-
2
Есть ли способ заставить Excel 2007 автоматически восстанавливать фоновые файлы, как в MS Word?
-
1
Excel Word Wrap + исчезающий текст
-
-
1
Простое объединение / очистка с помощью Excel
-
7
Как вы поддерживаете Microsoft Excel на полной скорости, даже если у него нет фокуса окна?
-
3
Какой лучший способ кодировать видео для загрузки на YouTube?
-
2
Почему вы не можете копировать / вставлять изображения в Excel, но скриншоты работают?
-
3
Как синхронизировать Excel с таблицей Google Docs
-
9
Как разделить имя, чтобы получить имя и фамилию?
-
1
Ссылки в Excel изменены после сбоя