Мне нужна строка, которая не будет правильно конвертироваться в ANSI с использованием нескольких кодовых страниц - PullRequest
1 голос
/ 09 октября 2009

Моя библиотека .NET должна преобразовывать строки в библиотеку C, которая ожидает текст, закодированный с использованием кодовой страницы ANSI системы по умолчанию. Поскольку .NET поддерживает Unicode, это позволяет пользователям передавать строку в библиотеку, которая не конвертируется должным образом в ANSI. Например, на английском компьютере «デ ス ク ト ッ プ» превратится в «?????» при передаче в библиотеку C.

Для решения этой проблемы я написал метод, который определяет, когда это произойдет, путем сравнения оригинальной строки со строкой, преобразованной с использованием кодовой страницы ANSI. Я хотел бы протестировать этот метод, но мне действительно нужна строка, которая гарантированно не будет кодируемой. Например, мы тестируем наш код на английском и японском компьютерах (среди других языков). Если я напишу тест, чтобы использовать приведенную выше строку на японском языке, тест завершится неудачно, когда японская система правильно закодирует строку. Я мог бы написать тест, чтобы проверить кодировку текущей системы, но тогда у меня возникает кошмар обслуживания каждый раз, когда мы добавляем / удаляем новый язык.

Есть ли символ Unicode, который не кодируется с любой кодовой страницей ANSI? В противном случае, может ли строка быть составлена ​​из символов из достаточно разных кодовых страниц, чтобы гарантировать сбой? Моя первая попытка состояла в том, чтобы использовать китайские иероглифы, поскольку мы не покрываем китайский, но, очевидно, японский язык может конвертировать китайские иероглифы, которые я пробовал.

edit Я собираюсь принять ответ, который пока предлагает грузинскую строку, но действительно ожидал результата с небольшим количеством символов из разных языков. Я не знаю, планируем ли мы поддерживать грузинский, так что пока все нормально. Теперь я должен проверить это на каждом языке. Радость!

Ответы [ 4 ]

5 голосов
/ 10 октября 2009

Существует довольно много языков только для Unicode. Грузинский является одним из них. Вот слово «английский» по-грузински: ინგლისური Вы можете найти больше в грузинском файле (ka.xml) CLDR DB .

2 голосов
/ 09 октября 2009

Если под «ANSI» вы подразумеваете кодовые страницы Windows, я вполне уверен, что символы из BMP не охватываются никакими кодовыми страницами Windows.

Например, попробуйте некоторые из византийских музыкальных символов

0 голосов
/ 09 октября 2009

Что вы подразумеваете под «кодовой страницей ANSI»? В Windows кодовые страницы - Microsoft, а не ANSI. ИСО определяет серию кодовых наборов 8859-х; У Microsoft есть кодовые страницы Windows, аналогичные большинству из них.

Вы думаете об однобайтовых кодовых наборах? Если это так, вы должны искать Unicode символов в эзотерических языках, для которых менее вероятно будет набор не-Unicode, однобайтовый код.

Вы можете посмотреть на такие языки, как: деванагари, ой чики, чероки, огам.

0 голосов
/ 09 октября 2009

Существуют кодовые страницы Windows, которые охватывают все символы Unicode (например, Cp1200, Cp12000, Cp65000 и Cp65001), поэтому не всегда возможно создать строку, которая не может быть преобразована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...