И ошибка 78455 («Предоставить возможность принудительной записи спецификации в файлы UTF-8»), и ошибка 136854 не оставляют особой надежды на такую возможность.
Поддержка кодирования в рабочей области основана на том, что доступно из Java .
Для любого данного ресурса в рабочей области можно получить строку кодировки, которую можно использовать с любыми API-интерфейсами Java, которые принимают строки кодировки.
Примеры:
- '
US-ASCII
',- '
UTF-8
',- '
Cp1252
',- '
UTF-16
'(Big Endian, спецификация вставлена автоматически),- '
UTF-16BE
'(Big Endian, спецификация не вставлена автоматически),- '
UTF-16LE
'(Little Endian, спецификация не вставляется автоматически).Для кодировок Java, кроме кодировки «UTF-16», спецификации не вставляются (при записи) и не удаляются (при чтении) бесплатно .
Даже если это озадачивает конечных пользователей, именно так работают все Java-приложения.
Если приложения хотят поддерживать создание файлов UTF-8 с спецификациями, чтобы соответствовать ожиданиям своих пользователей, им необходимо предоставить такую возможность самостоятельно (поскольку ни Java, ни модель ресурсов не помогут в этом).
Eclipse действительно обеспечивает некоторые улучшения в обнаружении спецификаций, но не генерирует и не пропускает их.
Я узнал, как это сделать с помощью помощь участника другого форума, который в суматохе пробовал разные вещи, которые я забыл. Так что спасибо этому забытому человеку.
Вот код, который в итоге сработал (замаскированный подходящим образом, но дает правильную идею):
BasicHttpBinding binding = new BasicHttpBinding("APISoap"); /* APISoap is the name of the binding element in the app.config */
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;
binding.UseDefaultWebProxy = false;
binding.ProxyAddress = new Uri(string.Format("http://{0}:{1}", proxyIpAddress, proxyPort));
EndpointAddress endpoint = new EndpointAddress("http://www.examplewebservice/api.asmx");
WebServiceClient client = new WebServiceClient(binding, endpoint);
client.ClientCredentials.UserName.UserName = proxyUserName;
client.ClientCredentials.UserName.Password = proxyPassword;