Skip to main content

Professional Iran System encoding library with Persian/English support

Project description

Iran System Encoding 🇮🇷

PyPI version License: MIT Python Versions

A high-performance, professional Python library for the legacy Iran System character encoding. This package provides symmetrical encoding and decoding with automatic locale detection, smart number handling, and an exact port of the original C logic.


🚀 Key Features

  • ✅ Bidirectional Conversion: Seamlessly convert between Unicode and Iran System encoding.
  • ✅ Pure Python Core: Zero external dependencies. We removed arabic_reshaper and python-bidi to provide a faster and more stable internal implementation.
  • ✅ C Extension Support: Includes a high-performance C source for optional compilation, delivering maximum speed.
  • ✅ Intelligent Locale Detection:
    • Context-Aware: Automatically detects if the text is Persian (fa) or English (en).
    • Smart Numbers: Automatically converts digits to Iran System format in Persian contexts, and keeps them as ASCII in English contexts.
  • ✅ Precise Visual Ordering: Implements the exact rule-based reshaping and visual layout logic from original legacy C systems.
  • ✅ Command-Line Interface (CLI): A built-in tool for quick terminal-based operations.

📦 Installation

pip install iran-encoding

🛠 Usage Guide

Python API

import iran_encoding

# 1. Encoding (Unicode -> Iran System)
# Automatically handles reshaping and visual ordering
text = "سلام دنیا 123"
encoded = iran_encoding.encode(text)
print(encoded.hex())

# 2. Decoding (Iran System -> Unicode)
decoded = iran_encoding.decode(encoded)
print(decoded) # Output: "سلام دنیا ۱۲۳"

# 3. Smart Locale Detection
# Persian letters trigger the 'fa' locale
print(iran_encoding.detect_locale("Hello سلام")) # 'fa'

# If only English text and numbers are present, it uses 'en'
# and converts Persian digits to ASCII if necessary.
print(iran_encoding.detect_locale("Hello ۱۲۳")) # 'en'

Command-Line Interface

The library includes a CLI tool named iran-encoding:

# Encode text to hex
iran-encoding encode "سلام دنیا"

# Decode Iran System hex to Unicode
iran-encoding decode-hex "a8 f3 91 f4"

# Decode raw byte string literal
iran-encoding decode "b'\xa8\xf3\x91\xf4'"

⚙️ Technical Overview

Unlike modern Unicode, Iran System is a visual encoding. This means the specific byte code for a letter depends on its shape (initial, medial, final, or isolated).

This library utilizes a verified port of legacy C algorithms to:

  1. Reshape characters based on surrounding context.
  2. Order the visual layout for right-to-left display.
  3. Handle Alphanumeric sequences correctly within bi-directional text.

Our implementation ensures 100% compatibility with legacy databases and hardware terminals.


🧪 Testing & Quality

We prioritize reliability. Our test suite covers 100% of the core conversion logic:

python3 -m pytest tests/

📄 License & Support

Contributions are welcome! Please feel free to open an issue or submit a pull request on our GitHub repository.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iran_encoding-1.1.0.tar.gz (20.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

iran_encoding-1.1.0-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file iran_encoding-1.1.0.tar.gz.

File metadata

  • Download URL: iran_encoding-1.1.0.tar.gz
  • Upload date:
  • Size: 20.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for iran_encoding-1.1.0.tar.gz
Algorithm Hash digest
SHA256 ab1cb0b1e0621b11dd2cb7f496ec45d1768bd6da4f592b690453e79e2269195a
MD5 0cb5f9606f8d0f8aa0f6454c70cf43fa
BLAKE2b-256 d02bfd66d671d9f401a6207aa16a3874348539f3999e275e1d9956eb9045ac16

See more details on using hashes here.

File details

Details for the file iran_encoding-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: iran_encoding-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for iran_encoding-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7353f4b705955ff6afcbb04031b4f7ff1cffb4ff07fd7ceae9800807e1dbdfe7
MD5 a3bb43bbf4824564b0c96ccf9f2d55e2
BLAKE2b-256 f63d51df4ce0f121367982de0bf8a1aa342531e199e45d95ed6f0056225f72e6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page