Odd character generation in the payload from the R/3 side to PI server

Dear Experts,
       The scenario is an integration from R/3 -PI- Webserver (Ext CRM server). An ABAP report is executed on the R/3 side which in turn invokes the RFC which is connected to PI server through RFC Adapter. On the receiving side the SOAP Adapter is used for connecting the External web server. Now when ABAP Report is executed on R/3 server it generates a transaction which does not gives error but the payload generated from the R/3 side is incorrect. When we check it on the PI server using the SXMB_MONI transaction, we can clearly see the odd characters like ㄲ㠸㈰㠺㔴㘱㌺ which is defined as string in the inbound message payload.ie In the payload looks like as given below. 
<ns1:string>??㠸㈰㠺㔴㘱㌺</ns1:string>
Kindly advice on how to overcome such problem. Is there any setting which needs to be done on the R/3 side or on the PI server side pls let us know.
Thanking You
With Kind Regards
Sylvester

Hi,
You can change the encoding in your SOAP Adapter ...
check SAP Note:
Note 856597 - FAQ: XI 3.0 / PI 7.0 / PI 7.1 SOAP Adapter
Rgds,
Naveen.

Similar Messages

  • Capture the file name in the payload from the SOAP payload

    Hi ,
    We have a scenario , a file to RFC , we need the file name which is coming the SOAP payload . This file name needs to be captured in the payload . Please tell me is there  any way capture this .
    Thanks
    Anita

    Anita,
    If SP14 and above , do this,
    Sender File adapter --> Adapter Specific Identifiers -->  Select File name
    Then in your mapping, you can use this piece of code to access / get the file name,
    DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
    DynamicConfigurationKey key = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File","FileName");
    String FileName = conf.get(key);
    Regards,
    Bhavesh

  • Getting the payload from a faulted process

    I'm using the fault framework and I need to know how to get the payload from the faulted process. I have a custom java logger that uses the locator API, but I'm finding out that this will only work if the process has been persisted to the dehydration store. Is there another way to get the payload? I know I can use checkpoint/wait within the bpel process to force dehydration but I'm looking for another alternative

    The problem is the cube instance table has not been populated yet for the instance. So from a faulted instance that has NOT been dehydrated to cube instance, how will I get to the invoke_message table, or how will I get the payload from the faulted instance.
    I'm able to get the document fine when the cube_instance table is populated, my problem is sometimes the instance has not been dehydrated and cube_instance is not available. So from a faulted instance how will I get to the invoke_message table without using the cube_instance table

  • Extracting json payload from the incoming request

    Hi,
    I am looking for ways on how to extract the application/json payload in my web resource methods when developing applications using jersey. I know that there are multiple annotations like @PathParam, @FormParam and others to get the data sent using other http methods. Im looking for an example on how to get the payload from the http post request?
    Can someone help?
    webservices are built using jersey.
    Thanks

    http://jersey.java.net/nonav/documentation/latest/user-guide.html
    If it isn't in the user guide... well then it is either not documented or it doesn't exist.

  • How do I setup my Time Capsule (3rd Generation) to be accessed from the internet while I'm traveling?

    How do I setup my Time Capsule (3rd Generation) to be accessed from the internet while I'm traveling? It is installed on my home network behind my TWC broadband router.

    Ok.. since the TWC modem is also a router.. all configuration takes place on this box.. NONE whatsoever takes place on the TC.
    There is no airport utility 7.7.3 but there is a firmware of that number for the latest AC model TC..
    Is it tall like this.
    Then it is Gen5.
    otherwise it will have a firmware.. 7.6.4 or earlier and the airport utility must be 6.3 or earlier.
    Open the Airport utility and give us a screenshot of the summary page.
    That will also help us determine that you have the TC, which version and how it is setup.
    You might want to press the edit and also give us the Internet and Network tab as they should be set correctly as well.
    I have created a DDNS through DYN.com although I am not sure how to implement this into the TC.
    You do not do anything in the TC.. set it up in the Ubee router.
    Port forward 548 to the TC in the Ubee router.
    And make sure the TC has a static IP in the Ubee router.
    Overall if you find this too hard I strongly recommend you buy a product designed for remote access .. eg WD MyCloud.. they are cheap and easy peasy to setup for remote access.. by PC or Mac and since it is built outside of Apple you not bound up in Apple limitations built into all their equipment to prevent you using it the way you want.. rather than apple want you too.. eg BTMM and iCloud being the only way apple provide for access to the TC and only when it is the main router of the network.
    You are fighting hard because Apple made this hard.. not easy.

  • Need to reterive the payload from SOA-INFRA dehydration tables.

    Hi gurus,
    I've raised couple of SRs with Oracle and did not got appropriate response. So I think there are a lot of g8 minds also working here.
    Requirement:
    I need to reterive the payload in the xml format and store in a db table for certain process.
    Steps followed:
    Created a soa process which accepts the InstanceId and ECID as input and provides them to a java class using Java embed activity. The class that accepts that input and connect to getCompositeInstances() using a locator class. In this process it will make use of another two classes to convert the instance payload to dom and then to display. The mainclass uses the XMLUtil and XPathUtils classes for this requirement.
    When I ran the three classes then I'm able to get the payload, but when called using the Javaembed I'm running into trouble. I'm getting a null value, not even any exception. I tried removing the catch in all the classes but no luck. Please find the below code in the Java embed and the java classes also.
    Code in Java Embed:
    try
    setCompositeInstanceTitle("Composite HelloWorld123");
    String ecid =(String) getVariableData("Input_java_ecid");
    String compInstanceId =(String) getVariableData("Input_Java_instanceid");
    addAuditTrailEntry("Payload_ecid is: " + ecid);
    addAuditTrailEntry("Payload_insta is: " + compInstanceId);
    Blob2String.MainClass mc = new Blob2String.MainClass();
    String inputPayload = mc.getCompositeInstancePayload(compInstanceId, ecid);
    if(inputPayload == null)
    addAuditTrailEntry("inputPayload is*********"+inputPayload+".........");
    InsertIntoDB ir = new InsertIntoDB();
    ir.InsertMethod1(inputPayload,compInstanceId,ecid) ;
    /*//addAuditTrailEntry("Payload is: " + inputPayload);
    String StringPayload =(String)inputPayload;
    addAuditTrailEntry("StringPayload is: " + StringPayload);
    setVariableData("Java_Payload", StringPayload); */
    catch(Exception e)
    addAuditTrailEntry("Exception is: " + e);
    e.printStackTrace();
    Code in MainClass:
    package Blob2String;
    import java.util.*;
    import javax.naming.Context;
    import oracle.soa.management.facade.ComponentInstance;
    import oracle.soa.management.facade.CompositeInstance;
    import oracle.soa.management.facade.Locator;
    import oracle.soa.management.facade.LocatorFactory;
    import org.w3c.dom.*;
    import oracle.soa.management.util.*;
    import oracle.fabric.common.*;
    import oracle.fabric.logging.*;
    import oracle.fabric.logging.BaseMessageBundle;
    public class MainClass {
    /* public MainClass() {
    super();
    public String getCompositeInstancePayload(String compInstanceId,String ecid)
    String compositeName="GetOpenCompositeInstances";
    Hashtable jndiProps = new Hashtable();
    String inputPayload="";
    try
    jndiProps.put(Context.PROVIDER_URL,"t3://abc.xyz.com:9102/soa-infra");
    jndiProps.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
    jndiProps.put(Context.SECURITY_PRINCIPAL,"weblogic");
    jndiProps.put(Context.SECURITY_CREDENTIALS,"welcome123");
    jndiProps.put("dedicated.connection","true");
    Locator locator = LocatorFactory.createLocator(jndiProps);
    CompositeInstanceFilter filter = new CompositeInstanceFilter();
    filter.setECID(ecid);//Set the composite ECID
    filter.setId(compInstanceId);//Set the composite instance id
    List<CompositeInstance> compositeInstance = locator.getCompositeInstances(filter);
    ComponentInstanceFilter instanceFilter = new ComponentInstanceFilter();
    instanceFilter.setCompositeInstanceId (compInstanceId); //Set the composite instance id
    List<ComponentInstance> componentInstance = compositeInstance.get(0).getChildComponentInstances(instanceFilter);
    if (compositeInstance.size() > 0) {
    Document docAudit = XMLUtil.convertToDOM(componentInstance.get(0).getAuditTrail().toString());
    String payloadAudit = XPathUtils.executeXPath(docAudit, "//details").toString();
    Document docPayload = XMLUtil.convertToDOM(payloadAudit);
    Node payloadNode = XPathUtils.executeXPath(docPayload, "//part//*", "NODE");
    inputPayload = XMLUtil.nodeToString(payloadNode);
    //System.out.println(inputPayload);
    catch(Exception e){
    // e.printStackTrace();
    System.out.println(e);
    return inputPayload;
    public static void main(String[] args){
    MainClass Obj = new MainClass();
    String result=Obj.getCompositeInstancePayload("60004" , "d90df5a0fd2bc5c7:4d37316b:13da0ebcf67:-8000-00000000000003ca") ;
    //String result=Obj.getCompositeInstancePayload("16952862" , "ef14bd96767c0e08:-152cfeeb:13d2379cff3:-8000-000000000008c968") ;
    // System.out.println(result);
    Code in XMLUtil:
    package Blob2String;
    import org.xml.sax.InputSource;
    import java.io.*;
    import javax.xml.parsers.*;
    import javax.xml.transform.*;
    import javax.xml.transform.*;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    import org.w3c.dom.*;
    import org.xml.sax.InputSource;
    import oracle.fabric.logging.*;
    public class XMLUtil {
    * @param inputXML
    * @return
    * @throws Exception
    public static Document convertToDOM(String inputXML) throws Exception {
    Document dom = null;
    try {
    DocumentBuilderFactory factory =
    DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    //DocumentBuilder builder = new org.apache.xerces.jaxp.DocumentBuilderFactoryImpl().newDocumentBuilder();
    InputSource is = new InputSource(new StringReader(inputXML));
    dom = builder.parse(is);
    } catch (Exception ex) {
    throw ex;
    return dom;
    public static String nodeToString(Node node) throws Exception{
    StringWriter sw = new StringWriter();
    try {
    Transformer t = new org.apache.xalan.processor.TransformerFactoryImpl().newTransformer();
    t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
    t.setOutputProperty(OutputKeys.INDENT, "yes");
    t.transform(new DOMSource(node), new StreamResult(sw));
    } catch (TransformerException te) {
    System.out.println("nodeToString Transformer Exception");
    throw te;
    return sw.toString();
    Code in XPathUtils :
    package Blob2String;
    import javax.xml.xpath.*;
    import org.w3c.dom.*;
    import oracle.fabric.logging.*;
    public class XPathUtils {
    public static Object executeXPath(Document doc, String xpathStr) throws Exception{
    XPath xpath = null;
    String value = null;
    try {
    XPathFactory factory = XPathFactory.newInstance();
    XPath xpath1= factory.newXPath();
    //xpath = new org.apache.xpath.jaxp.XPathFactoryImpl().newXPath();
    XPathExpression expr = xpath1.compile(xpathStr);
    value = (String)expr.evaluate(doc, XPathConstants.STRING);
    return value;
    } catch (Exception e) {
    throw e;
    public static Node executeXPath(Document doc, String xpathStr,String type) throws Exception{
    XPath xpath = null;
    Node value = null;
    try {
    xpath = new org.apache.xpath.jaxp.XPathFactoryImpl().newXPath();
    XPathExpression expr = xpath.compile(xpathStr);
    value = (Node)expr.evaluate(doc, XPathConstants.NODE);
    return value;
    } catch (Exception e) {
    throw e;
    Its an urgent issue and I have the deadline to get on with. I've raised SR with oracle but there was no use. Kindly help me. Help will be greatly appreciated.
    Thanks,
    Venkatesh.

    are you trying to retreive the payload for a completed/closed instance or for an inflight instance? if it is for inflight instance you can retreive the payload using
    String [] params = new String[] {"inputVariable"};
    String payload = locator.executeComponentInstanceMethod(bpelInstanceId, "getVariableAsString", params);
    http://docs.oracle.com/cd/E21043_01/apirefs.1111/e10659/oracle/soa/management/facade/Locator.html#executeComponentInstanceMethod_java_lang_String__java_lang_String__java_lang_Object___
    if it is for a completed instance, you need to get the input payload for the instance then you can get it from the audit trail. i think your xpath is not correct. the data in details look like this:
    </event><event sid="BpSeq0.3" cat="2" wikey="2020-BpRcv0-BpSeq0.3-1" state="5" n="4" label="receiveInput" date="2013-03-25T13:14:05.428-07:00" type="2"><message><![CDATA[Received "process" call from partner "client"]]></message><details><![CDATA[
    <input><part name="payload" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><ns1:input xmlns:ns1="http://samples.otn.com/bpel2.0/ch10.7">7</ns1:input></part></input>]]></details>
    you need extract the CDATA content and parse again. this query needs to be changed, there could be many details in the audit trail, you need to pick the right one.
    XPathUtils.executeXPath(docAudit, "//details").toString();
    this audit xml is namespace aware so you need to use this, choose the first details.
    public static NodeList selectNodes( org.w3c.dom.Element pElement,
    String xpathExpression,
    Map prefixNamespaceMapping ) throws Exception
    Edited by: murugac on Apr 1, 2013 10:00 AM

  • Unable to read payload from the message object in XI

    Hello Guys,
    Please help me about my problem in XI version 7.0.im quite new here.
    im trying to test my config but error message occured. "Unable to read payload from the message object"
    when i checked the comm channel this is the error message :
    Error during database connection to the database URL 'jdbc:sqlserver://172.16.40.20:1433;databasename=TRAVEL:SelectMethod=cursor' using the JDBC driver 'com.microsoft.sqlserver.jdbc.SQLServerDriver': 'com.sap.aii.adapter.jdbc.sql.DriverManagerException: Cannot establish connection to URL 'jdbc:sqlserver://172.16.40.20:1433;databasename=TRAVEL:SelectMethod=cursor': com.microsoft.sqlserver.jdbc.SQLServerException: Cannot open database "TRAVEL:SelectMethod=cursor" requested by the login. The login failed.'
    when i tried my login in sql it works...but in this message the login is failed..what shall i  do..
    Please advice.
    Thanks in advance
    aVaDuDz

    Hi
    Check with the connection string & Authorization of user you have used.
    MSSQL string is
    jdbc:microsoft:sqlserver://dbhost:1433;databaseName=example;SelectMethod=Cursor
    While doing JDBC its good to refer Note 831162 lot of problems can be resolved.
    Thanks
    Gaurav

  • How to copy the payload from onMessage Activity in BPEL interface

    Hi All,
    how to copy the payload from onMessage Activity in BPEL interface when it is there at the starting of the process and when clicking on the OnMessage Activity
    i'm able to see the View XML Document link. By Clicking on View XML Document Payload is getting opened for me but at this point i'm not able to copy the payload and more over the scroll bar is also not there.
    When i'm saving it as .xml i'm able to see the payload but not in an xml format.
    When trying the payload in SOAPUI it's not getting reformatted.
    How can we solve the issue.
    Regards,
    CH

    The input payload can be seen from "Audit Trail" tab and "Flow" tab of any BPEL instance. The XML shown in "Flow" tab are not rightly formatted XMLs and you may not able to copy them "as is" to a text editor. But, the XML shown in "Audit Trail" should be in the right XML format and you should be able to click on any audit trail entry and copy the XML payload to a text editor. soapUI should also be able to format such XMLs without any issue. Just make sure that you don't overwrite soap header/body section when pasting to soapUI request.

  • Unable to read payload from the message object

    Hi
    I have a scenario where i am send request to http receiver and getting the response. When I am testing through WFETCH it is working fine. But when i am testing through XI I am getting the follwoing error
    Unable to read payload from the message object
    I have tested the XI payload in mapping. I have done all kinds of testing but it is still giving the same error.
    One more strange thing is
    I have done one BPM scenario where Data is coming from Source to BPM( which is asyn) and then from it will go from BPM to Target (which is sync) But when I am checking the SXMB_MONI... it showing the messages like this
    Source to BPM
    Target to BPM
    Target to BPM.
    But i think it should show message like
    Source to BPM
    BPM to Target
    Target to BPM
    why i am getting the flo

    Hi
    Check with the connection string & Authorization of user you have used.
    MSSQL string is
    jdbc:microsoft:sqlserver://dbhost:1433;databaseName=example;SelectMethod=Cursor
    While doing JDBC its good to refer Note 831162 lot of problems can be resolved.
    Thanks
    Gaurav

  • My ipod (nano, 6th generation) won't sync to a new computer with different stuff on it. It *appears* to sync but when it's done it still has the stuff from the other computer on it. What to do?

    My ipod (nano, 6th generation) won't sync to a new computer with different stuff on it. Itunes on the new computer doesn't give the usual warning that you are about to lose all your existing stuff and the ipod *appears* to sync but when it's done it still has the stuff from the other computer on it. What to do?

    Hey eamonn27
    Thank you for using the Apple Support Community. Due to the nature of your issue, you may find more information by using another one of Apple's support resources.
    Express Lane
    https://expresslane.apple.com/GetproductgroupList.action
    Thanks for using Apple Support Communities.
    Regards,
    -Norm G.

  • TO Read the data from the I/P payload of the proxy

    I want to know is there any function module or report available to read the data from the
    payload of the proxy. As we can see the data in the input payload for the prticular
    message in sxmb_moni tcode.Is there any table where this data will be stored.
    And also I have to update one Ztable with XML Message ID,Sender Interface Namespace,
    Sender Interface Name as and when this proxy is triggered. For this I will have to implement the
    class for the interface in the sproxy tcode and in this implementation i will update this
    ztable but my problem is how will i get this values there.
    In debugging I found one report  rsxmb_display_msg_vers_new is submitted in sxmb_moni to show ll these details but
    looking specially foe the paylod data.
    Your help is highly appreciated.
    Thanks.

    Hello PawanG ,
    It is very simple to find out all DB tables involved in the rsxmb_display_msg_vers_new . Steps below:
    1. run tcode SE30
    2. click "program" radio box, input RSXMB_DISPLAY_MSG_VERS_NEW as program name, click "Execute" button.
    3. input an valid message uuid in the "Message GUID" field and execute.
    4. go back to SE30,click "Evaluate" tab
    5. click "DB tables".
    Then all DB table name and description are listed there. I am sure you can find what you need. Good luck!
    Best Regards,
    Jerry

  • Handing over the payload from BatchFTP eWay to custom OTD possible?

    Hi there,
    As I have been building a JCAPS interface I have a design question that nobody has been able to answer:
    I intend to use BatchFTP eWay to connect to a third-party FTP-server and get a file. Now I want the BatchFTP eWay to hand off the data file to a custom OTD which needs to unmarshall the data. I looked at various examples but only found an example of BatchFTP eWay to BatchLocal (copy payload to payload) but nothing else. So my question is: how do I get my standard BatchFTP eWay adapter to handover the data or payload to my custom OTD ?
    I can create a jcd to get the file from the external system and write it off to a local file on the JCAPS-box, but can one JCD then trigger another JCD which takes in the newly created local file and then calls my custom OTD to unmarshall the data? Maybe that is the way things should be done?
    Thanks for your advice,
    Richard

    Sorry, I sent you down the wrong path a little:
    try{
         //BatchFTP_Incoming is my batchFTp OTD
         BatchFTP_Incoming.getConfiguration().setTargetFileName( fileName ); //can be set in the batchftp settings page
         BatchFTP_Incoming.getClient().get();
         //Copy the FTP GetPayload to a variable
         String payload = new String( BatchFTP_Incoming.getClient().getPayload() );
         try{
              otdInput.unmarshallFromString(payload);
         }catch(Exception e){
              //unmarshall exception can happen here
    }catch(Exception e){
         //Error getting the file
    }There are many unmarshall methods (unmarshallFromXML, unmarshallFromBytes, etc.). JCAPS 5.1.3 and JCAPS 6 both have an intellisense if you hit ctrl+space on an object.
    One "gotcha" of the BatchFTP is the target filename and the target location must have some value set in the collaboration map. I set them to "[set in jcd]" and then just write over them using code:
    inFTP.getConfiguration().getPostTransfer().setPostTransferCommand( "DELETE" );
    inFTP.getConfiguration().setTargetDirectoryName( "/apps/caps/pickup/ljs" );
    inFTP.getConfiguration().getTargetLocation().setTargetDirectoryNameIsPattern( false );
    inFTP.getConfiguration().setTargetFileNameIsPattern( false );
    inFTP.getConfiguration().setTargetFileName("testFile.txt");Post if you have any more Q's,
    --Adam                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • I have an old ipod touch 3rd generation and when ever i open it , it doesn't open or it turn blank, if i click on the home button and the power button to do the reboot it works but when i remove my finger it close. i can acced the ipod from the cpu but no

    i have an old ipod touch 3rd generation and when ever i open it , it doesn't open or it turn blank, if i click on the home button and the power button to do the reboot it works but when i remove my finger it close. i can acced the ipod from the cpu but not from the actual device

    Try:                                               
    - iOS: Not responding or does not turn on
    - Also try DFU mode after try recovery mode
    How to put iPod touch / iPhone into DFU mode « Karthik's scribblings
    - If not successful and you can't fully turn the iOS device fully off, let the battery fully drain. After charging for an least an hour try the above again.
    - Try another cable
    - Try on another computer                            
    - If still not successful that usually indicates a hardware problem and an appointment at the Genius Bar of an Apple store is in order.
    Apple Retail Store - Genius Bar                                     

  • I have a iPod nano 5th generation and there's a song I'm trying to play, but each time I click it from artist it just shows the songs name again. And when I try to click the song from the song list it just skips. How can I fix this?

    Pretty much I have a song on my iPod 5th gen nano that doesn't wanna play, its just one song every other song works. I click it and it show the thing when a song is about to play but then it instantly goes back to where you click on the song. And when I click on it in the songs list it skips immediately to the next song on the list. I have tried restoring my iPod but the song still won't work I've also tried removing the song from the library and the putting it back on iTunes but still no luck. What do you guys suggest I do?

    Can you play the song in iTunes?
    If you can't the song file is probably corrupt and needs to be replaced.

  • I have a VI and an attched .txt data file. Now I want to read the data from the .txt file and display it as an array in the front panel. But the result is not right. Any help?

    I have a VI and an attched .txt data file. Now I want to read the data from the .txt file and display it as an array in the front panel. But the result is not right. Any help?
    Attachments:
    try2.txt ‏2 KB
    read_array.vi ‏21 KB

    The problem is in the delimiters in your text file. By default, Read From Spreadsheet File.vi expects a tab delimited file. You can specify a delimiter (like a space), but Read From Spreadsheet File.vi has a problem with repeated delimiters: if you specify a single space as a delimiter and Read From Spreadsheet File.vi finds two spaces back-to-back, it stops reading that line. Your file (as I got it from your earlier post) is delimited by 4 spaces.
    Here are some of your choices to fix your problem.
    1. Change the source file to a tab delimited file. Your VI will then run as is.
    2. Change the source file to be delimited by a single space (rather than 4), then wire a string constant containing one space to the delimiter input of Read From Spreadsheet File.vi.
    3. Wire a string constant containing 4 spaces to the delimiter input of Read From Spreadsheet File.vi. Then your text file will run as is.
    Depending on where your text file comes from (see more comments below), I'd vote for choice 1: a tab delimited text file. It's the most common text output of spreadsheet programs.
    Comments for choices 1 and 2: Where does the text file come from? Is it automatically generated or manually generated? Will it be generated multiple times or just once? If it's manually generated or generated just once, you can use any text editor to change 4 spaces to a tab or to a single space. Note: if you want to change it to a tab delimited file, you can't enter a tab directly into a box in the search & replace dialog of many programs like notepad, but you can do a cut and paste. Before you start your search and replace (just in the text window of the editor), press tab. A tab character will be entered. Press Shift-LeftArrow (not Backspace) to highlight the tab character. Press Ctrl-X to cut the tab character. Start your search and replace (Ctrl-H in notepad in Windows 2000). Click into the Find What box. Enter four spaces. Click into the Replace With box. Press Ctrl-V to paste the tab character. And another thing: older versions of notepad don't have search and replace. Use any editor or word processor that does.

Maybe you are looking for