Japanese Encoding Conversion
Ruby, 140 116 bytes

Takes code point as an array, and encodings are JIS, Shift_JIS, and EUC-JP, respectively.

Ruby supports converting between EUC-JP and SHIFT_JIS, so we math JIS encoding into EUC, perform the appropriate conversion, then math back the JIS encoding if that's the destination encoding.

-34 bytes by getting permission to take EUC input as EUC-JP.



-&gt;c,s,d{(c.map!{|e|e+=128};s="EUCJP")if s=~r=/^J/
c.pack('c*').encode(d[r]?"EUCJP":d,s).bytes.map{|e|e-=d[r]?128:0}}


Try it online!

Explanation

-&gt;c,s,d{                                            # Function that takes 3 parameters
        (                           )if s=~r=/^J/   # If s is JIS: (starts with J)
                                                    #  (also store this regex for later)
         c.map!{|e|e+=128};                         # Add 128 to each codepoint
                           s="EUCJP"                # Change s to EUC-JP locale
  c.pack('c*')                                      # Pack codepoints into bytestring
    .encode(                                        # Encode the bytestring as follows:
                                                    #  Destination encoding is:
      d[r]?"EUCJP":d,                               #   If d is JIS, use EUC-JP instead
      s                                             #  Source encoding
    )
    .bytes                                          # Convert to bytes
    .map{|e|e-=d[r]?128:0}                          # If d is JIS, subtract 128
}


Pure Math Version, 164 162 bytes

Takes code points separately, and the encodings are integers: 0=JIS, 1=SHIFT_JIS, 2=EUC.

-2 bytes from Jonathan Allen.

-&gt;a,b,s,d,e=160{k,t=[[a-32,b-32],[a*2-1+b/158-(2+a/222)*128,b-63-b/128-b/158*94],[a-e,b-e]][s]
[[k+32,t+32],[128+k/2+k%2+k/63*64,158+t+t/64-k%2*95],[k+e,t+e]][d]}


Try it online!