Написал промтенькое приложение, которое форматирует текст для веба, используя сервис студии Лебедева Но возникают проблемы с русским текстом, как мне перекодировать секст из одной кодировки в другую? я пробовал сделать это так
Код | Charset charset = Charset.forName(this._encoding); CharsetDecoder decoder = charset.newDecoder(); CharsetEncoder encoder = charset.newEncoder(); Text = decoder.decode(encoder.encode(CharBuffer.wrap(Text))).toString();
|
но что-то не получилось.
Вот полный код проекта, может ещё где надо будет менять... класс RemoteTypograf
Код | package net;
import java.io.*; import java.net.*; import java.nio.*; import java.nio.charset.*; /** * @author AntonioBanderaz * */ public class remoteTypograf { private String _entityType = "4"; private String _useBr = "1"; private String _useP = "1"; private String _maxNobr = "3"; private String _encoding = "UTF-8"; /** * */ public remoteTypograf(String Encoding) { if(Encoding.length() > 0) this._encoding = Encoding; } public void HTMLEntries(boolean prop) { if(prop == true) this._entityType = "1"; } public void XMLEntries(boolean prop) { if(prop == true) this._entityType = "2"; } public void MixedEntries(boolean prop) { if(prop == true) this._entityType = "4"; } public void NoEntries(boolean prop) { if(prop == true) this._entityType = "3"; } public void br (boolean prop) { this._useBr = prop ? "1" : "0"; } public void p (boolean prop) { this._useP = prop ? "1" : "0"; } public void noBr(String prop) { this._maxNobr = (prop.length() > 0) ? prop : "0"; } public String DoRequest(String Text){ try { // Construct data Text = Text.replace("&", "&"); Text = Text.replace("<", "<"); Text = Text.replace(">", ">"); Charset charset = Charset.forName(this._encoding); CharsetDecoder decoder = charset.newDecoder(); CharsetEncoder encoder = charset.newEncoder(); Text = decoder.decode(encoder.encode(CharBuffer.wrap(Text))).toString(); String Data = "<?xml version=\"1.0\" encoding=\"" + this._encoding + "\"?>"; Data += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"; Data += "<soap:Body>"; Data += "<ProcessText xmlns=\"http://typograf.artlebedev.ru/webservices/\">"; Data += "<text>" + Text + "</text>"; Data += "<entityType>" + this._entityType + "</entityType>"; Data += "<useBr>" + this._useBr + "</useBr>"; Data += "<useP>" + this._useP + "</useP>"; Data += "<maxNobr>" + this._maxNobr + "</maxNobr>"; Data += "</ProcessText></soap:Body></soap:Envelope>"; // Create a socket to the host String hostname = "typograf.artlebedev.ru"; InetAddress addr = InetAddress.getByName(hostname); Socket socket = new Socket(addr, 80); // Send header BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), this._encoding)); wr.write("POST /webservices/typograf.asmx HTTP/1.1\r\n"); wr.write("Host: typograf.artlebedev.ru\r\n"); wr.write("Content-Length: " + Data.length() + "\r\n"); wr.write("Content-Type: text/xml\r\n"); wr.write("SOAPAction: \"http://typograf.artlebedev.ru/webservices/ProcessText\"\r\n"); wr.write("\r\n"); // Send data wr.write(Data); wr.flush(); // Get response BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream())); String response = ""; String line; while ((line = rd.readLine()) != null) { response += line; } wr.close(); rd.close(); //return response; response = response.substring(response.indexOf("<ProcessTextResult>") + 19, response.indexOf("</ProcessTextResult>")); response = response.replace(">", ">"); response = response.replace("<", "<"); response = response.replace("&", "&"); return response; } catch (Exception e) { return e.getMessage(); } } }
|
Внешнее оформление
Код | package net; import org.eclipse.swt.*; import org.eclipse.swt.events.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*;
/** * @author AntonioBanderaz * */ public class connectDialog { final private Shell sh; private Text text; public connectDialog(Display ds) { GridLayout layout= new GridLayout(); layout.numColumns = 1; sh = new Shell(ds, SWT.SHELL_TRIM); sh.setLayout(new FillLayout()); this.createTextComposite(); this.menu(); sh.addShellListener(new ShellAdapter() { public void shellClosed(ShellEvent e) { e.doit = true; } }); sh.setSize(300, 300); sh.open(); while(!sh.isDisposed()){ if(!ds.readAndDispatch()) ds.sleep(); } ds.dispose(); } private void createTextComposite() { Composite composite = new Composite(sh, SWT.NULL); FillLayout layout= new FillLayout(); layout.spacing = 10; composite.setLayout(layout); text = new Text(composite, SWT.MULTI | SWT.BORDER | SWT.WRAP); } private void menu() { Menu winMenu = new Menu(sh, SWT.BAR); MenuItem send = new MenuItem(winMenu, SWT.CASCADE); send.setText("Послать"); MenuItem exit = new MenuItem(winMenu, SWT.CASCADE); exit.setText("Выход"); send.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { send_selected(e); } }); exit.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { System.exit(0); } }); sh.setMenuBar(winMenu); } private void send_selected(SelectionEvent e) { remoteTypograf rt = new remoteTypograf("CP1251"); this.text.setText(rt.DoRequest(this.text.getText())); }
/** * @param args */ public static void main(String[] args) { new connectDialog(new Display()); } }
| |